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ỏ listtừ 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: cdrsẽ 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 carvà cdrtrả 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) 16chúng ta sẽ trở về ()?
(1 2 3) 16sẽ không bao giờ xuất hiện.