Tin hay không, đây thực sự là câu hỏi tôn giáo.
Có những phương ngữ mà mọi người dám gọi là một số loại Lisp trong đó danh sách trống là conses hoặc các đối tượng tổng hợp của một số loại, chứ không chỉ là một nguyên tử như nil
.
Ví dụ: trong danh sách "MatzLisp" (được gọi là Ruby) thực sự là mảng.
Trong NewLisp, danh sách là vùng chứa: đối tượng thuộc loại danh sách chứa danh sách liên kết của các mục, vì vậy danh sách trống là vùng chứa trống.[Reference].
Trong ngôn ngữ Lisp không phải là cụm sao ngoạn mục của loại này, danh sách trống là nguyên tử và danh sách không trống là ô nhị phân có trường giữ mục đầu tiên và trường khác chứa phần còn lại của danh sách. Danh sách có thể chia sẻ hậu tố. Với danh sách như (1 2 3)
, chúng tôi có thể sử dụng cons
để tạo (a 1 2 3)
và (b c 1 2 3)
cả hai đều chia sẻ bộ nhớ cho (1 2 3)
.
(Trong ANSI thông thường ANSI, danh sách trống nguyên tử ()
là đối tượng giống như biểu tượng nil
, mà tự đánh giá và cũng là sai Boolean. Trong Đề án, ()
không phải là biểu tượng. Boolean false #f
đối tượng. Tuy nhiên, danh sách Đề án vẫn được tạo thành từ các cặp và được kết thúc bởi một nguyên tử.)
Khả năng đánh giá (car nil)
không tự động theo dõi từ danh sách khuyết điểm của danh sách và nếu chúng ta nhìn ở tài liệu Lisp cổ đại, chẳng hạn như cẩm nang Lisp 1.5 từ đầu năm 1960 - một điều gì đó, chúng ta sẽ thấy rằng điều này đã vắng mặt. Ban đầu, car
thực sự là một cách để truy cập vào một trường của ô khuyết điểm và yêu cầu nghiêm ngặt đối số ô đối lập.
Ý tưởng hay như cho phép (car nil)
hoạt động (để tin tặc có thể cắt nhiều dòng mã vô dụng khỏi chương trình của họ) không xuất hiện qua đêm. Ý tưởng cho phép (car nil)
có thể đã xuất hiện từ InterLisp. Trong bất kỳ trường hợp nào, Evolution Of Lisp tuyên bố rằng MacLisp (một trong những người tiền nhiệm quan trọng của Common Lisp, không liên quan đến Apple Macintosh đến hai mươi năm sau), bắt chước tính năng này từ InterLisp (một trong những người tiền nhiệm quan trọng).
Các chi tiết nhỏ như thế này tạo nên sự khác biệt giữa lập trình dễ thương và chửi thề ở màn hình: xem ví dụ A Short Ballad Dedicated to the Growth of Programs lấy cảm hứng từ cuộc đấu tranh của lập trình viên Lisp với phương ngữ không rõ ràng trong đó danh sách trống không thể truy cập với car
. boolean false.
Tôi đã chỉnh sửa bài đăng của bạn để sử dụng 'defun' và không phải' define', là từ Đề án. Tôi không nghĩ rằng bạn đang nói về Scheme, vì Scheme không có 'nil', nó không cho phép bạn chuyển vào một danh sách rỗng tới' car' và 'cdr', và việc sử dụng danh sách trực tiếp đột biến được cau mày nhiều hơn trong cộng đồng Đề án. –
cũng có kỹ thuật [* head sentelel *] (http://stackoverflow.com/search?q=user%3A849891+head+sentinel), để sử dụng cá nhân của bạn: bắt đầu với danh sách singleton không trống, nói '(1) 'hoặc bất cứ điều gì; xử lý nó theo cách thống nhất và trả lại 'cdr' của nó ở cuối. Cho phép đơn giản hóa mã tốt đẹp với mức giá của một phân bổ tế bào bổ sung. –