?

Log in

парочка вопросов - Жить не можем без проблем! [entries|archive|friends|userinfo]
Жить не можем без проблем!

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

парочка вопросов [Apr. 7th, 2012|12:39 pm]
Жить не можем без проблем!
ru_lisp
[l10n_be]
В процессе изучения Лиспа натыкаюсь на некоторые моменты, с которыми пока не могу разобраться.

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), то запускается. Чего он хочет?
linkReply

Comments:
[User Picture]From: love5an
2012-04-07 01:49 pm (UTC)
Ну, про объекты литералы еще - из вышесказанного понятно, естественно, что их нежелательно менять каким-либо образом(в случае с cons - соответственно нежелательно использовать (setf car), (setf cdr) и т.п.).
(Reply) (Parent) (Thread)
From: l10n_be
2012-04-07 02:22 pm (UTC)
А (setf (nth n *list*) (do-something-with (nth n *list*)) можно?
(Reply) (Parent) (Thread)
[User Picture]From: love5an
2012-04-07 03:28 pm (UTC)
зависит от того что такое *list*
короче, если объекты - константы/литераты(из кода или из load-time-value например) - их модифицировать нельзя.
(Reply) (Parent) (Thread)