Общая переносимость lisp во всех реализациях [дубликат]

Убедитесь, что на вашем сервере установлен Sendmail.

Если вы проверили свой код и проверили, что там нет ничего плохого, перейдите в / var / mail и проверьте, пуста ли эта папка.

Если он пуст, вам нужно будет сделать:

sudo apt-get install sendmail

, если вы находитесь на сервере Ubuntu.

9
задан Cactus 5 May 2016 в 06:52
поделиться

2 ответа

Это общий объект Common Lisp, а не только SBCL.

Существует переменная cl:*features*, в которой перечислены символы для «функций», которые должны присутствовать в системе Lisp в настоящее время.

В файле Lisp выражение #+quicklisp(foo) означает: читать и выполнять (foo) только в том случае, если функция quicklisp присутствует в списке функций *features*.

В файле Lisp выражение #-quicklisp(foo) означает: читать и выполнять (foo), только если функция quicklisp НЕ присутствует в списке функций *features*.

Это средство часто используется для скрытия или отображения конкретного кода реализации для какой-либо другой реализации Common Lisp.

См. документацию:

16
ответ дан Rainer Joswig 21 August 2018 в 19:18
поделиться

Они являются частью Common Lisp READ er. Идея состоит в том, что они «спрятали» текст, если определенная функция (часто некая реализация CL) является (#+) или не доступна (#-).

Это, вероятно, концепция CL как идея C / C ++ «текстовых макросов» - концептуально и прагматично, они очень похожи на нечто вроде

 #ifdef __MSVC12__
 #ifndef __cplusplus__

... и тому подобное. Они буквально скрывают биты входящего кода cource от READ er, поэтому они никогда не лексируются - анализируются - интерпретируются - скомпилированы - оцениваются - интернированы - нада. Они просто перестают существовать, если в реализации CL, которой вы работаете, отсутствует функция / является «неправильной» реализацией / независимо от флага.

7
ответ дан Cactus 21 August 2018 в 19:18
поделиться