Trong các ngôn ngữ kiểu Lisp, một danh sách thường được định nghĩa như sau:
(list 1 2 3)
Đối với mục đích của thử thách này, tất cả các danh sách sẽ chỉ chứa các số nguyên dương hoặc các danh sách khác. Chúng tôi cũng sẽ bỏ list
từ khóa khi bắt đầu, vì vậy danh sách bây giờ sẽ như thế này:
(1 2 3)
Chúng ta có thể lấy phần tử đầu tiên của danh sách bằng cách sử dụng car
. Ví dụ:
(car (1 2 3))
==> 1
Và chúng ta có thể lấy danh sách gốc với phần tử đầu tiên được xóa bằng cdr
:
(cdr (1 2 3))
==> (2 3)
Quan trọng: cdr
sẽ luôn trả về một danh sách, ngay cả khi danh sách đó có một yếu tố duy nhất:
(cdr (1 2))
==> (2)
(car (cdr (1 2)))
==> 2
Danh sách cũng có thể nằm trong danh sách khác:
(cdr (1 2 3 (4 5 6)))
==> (2 3 (4 5 6))
Viết chương trình trả về mã sử dụng car
và cdr
trả về một số nguyên nhất định trong danh sách. Trong mã mà chương trình của bạn trả về, bạn có thể giả sử rằng danh sách được lưu trữ l
, số nguyên đích nằm ở l
đâu đó và tất cả các số nguyên là duy nhất.
Ví dụ:
Đầu vào: (6 1 3) 3
Đầu ra: (car (cdr (cdr l)))
Đầu vào: (4 5 (1 2 (7) 9 (10 8 14))) 8
Đầu ra: (car (cdr (car (cdr (cdr (cdr (cdr (car (cdr (cdr l))))))))))
Đầu vào: (1 12 1992) 1
Đầu ra: (car l)
(1 2 3) 16
chúng ta sẽ trở về ()
?
(1 2 3) 16
sẽ không bao giờ xuất hiện.