2011-12-28 17 views
7

Mọi người đều biết những gì các nhà điều hành #+#- có nghĩa là trong .sbclrc? Tôi không thể tìm thấy nó trong sách hướng dẫn. tôi thấy #- trong .sbclrc sau khi tôi cài đặt quicklisp:toán tử # + và # - in .sbclrc

#-quicklisp 
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp" 
             (user-homedir-pathname)))) 
    (when (probe-file quicklisp-init) 
    (load quicklisp-init))) 

Tôi cũng thấy #+ trong SBCL Hướng dẫn sử dụng, nhưng tôi không thể tìm thấy lời giải thích chức năng của họ. Có vẻ như có liên quan đến việc tải mô-đun riêng lẻ.

Chúng chỉ dành cho việc triển khai SBCL hay một phần của lisp chung?

Trả lời

6

Chúng là một phần của Common Lisp READ er. Ý tưởng là họ "ẩn" văn bản trừ khi một tính năng nhất định (thường, một CL thực hiện nhất định) là (#+) hoặc không phải là (#-) có sẵn.

Đây là có lẽ là khái niệm CL nhất như C/C++ ý tưởng "macro văn bản" - khái niệm và cách thực dụng, họ rất giống với một cái gì đó giống như

#ifdef __MSVC12__ 
#ifndef __cplusplus__ 

... và những thứ tương tự. Họ nghĩa đen ẩn bit của mã cource đến từ READ er, do đó, họ không bao giờ lexed - phân tích cú pháp - giải thích - biên dịch - đánh giá - interned - nada. Chúng đơn giản chấm dứt tồn tại nếu việc triển khai CL bạn đang chạy thiếu một tính năng/là việc triển khai "sai"/cờ bất kỳ.

+0

Bạn có biết nơi tôi có thể tìm thấy tài liệu cho việc này? Tôi tự hỏi nếu có các tính năng READER khác mà tôi không biết. – sudo

+3

Nói chung, bất cứ điều gì với một số # hàng đầu là một cái gì đó đặc biệt trong người đọc; kiểm tra chỉ số CLHS dưới #, bắt đầu từ http://www.lispworks.com/documentation/HyperSpec/Front/X_Mast_9.htm – BRFennPocock

13

Đó là một cơ sở chung của Common Lisp, không chỉ SBCL.

Có một biến số cl:*features* liệt kê các ký hiệu cho 'các đối tượng địa lý' sẽ có mặt trong hệ thống Lisp hiện tại. Các tính năng tiêu biểu là: endian, implementation, subystems, processor, extensions, Lisp dialect và nhiều hơn nữa.

Trong tệp Lisp, biểu thức #+quicklisp(foo) có nghĩa là: đọc và thực thi (foo) chỉ khi tính năng quicklisp có trong danh sách các tính năng *features*.

Trong tệp Lisp, biểu thức #-quicklisp(foo) có nghĩa là: đọc và thực thi (foo) chỉ khi tính năng quicklisp KHÔNG có trong danh sách các tính năng *features*.

Cơ sở này thường được sử dụng để ẩn hoặc hiển thị mã thực hiện cụ thể cho một số triển khai Common Lisp khác.

Xem tài liệu: