Apr 07, 2012 12:39
В процессе изучения Лиспа натыкаюсь на некоторые моменты, с которыми пока не могу разобраться.
1) sbcl & nunion
Введём такой простой код в repl clisp, gcl и sbcl
(setf a '(1 2 3))
(setf b '(4 5 6))
(nunion a b)
; clisp, gcl => '(1 2 3 4 5 6)
; sbcl => '(3 2 1 4 5 6)
А теперь узнаем значение a: в clisp и gcl получим '(1 2 3 4 5 6), а в sbcl -- '(1 4 5 6).
Вопрос: кто неправ? У clisp и gcl результат логичный и ожидаемый, у sbcl -- не пойми что. Если поведение sbcl правильное, то каков смысл в существовании nunion?
HyperSpec ситуацию не прояснил.
2) gcl
Возьмём такую простую программку для проверки:
(defun test (a)
(print a))
(test 6)
$ gcl -f test.lisp
Error: The variable A is unbound.
Fast links are on: do (si::use-fast-links nil) for debugging
Error signalled by SYSTEM::SET-UP-TOP-LEVEL.
Backtrace: PRINT
Если в начало добавить (si::use-fast-links nil), то запускается. Чего он хочет?