Изучая Лисп по http://www.intuit.ru/department/pl/lisp/ (у меня локальная
версия), застрял на тесте к 4-й лекции
http://www.intuit.ru/department/pl/lisp/4/ То ли бестолковый, то ли лекции
написаны небрежно.
Спорадически набираю 8 из 10 правильных ответов, к сожалению, на часть
отвечаю, просто подставляя в GNU Lisp.
Иногда получаю результаты, которых нет среди вариантов.
Иногда предлагают выбрать один вариант (радиобоксом), хотя правильных, на
мой взгляд, два, например (по памяти):
"Какая форма может быть переменной:
о (А) о 123
о A123 вариант: о A123
o Abc o Abc
(o - я так обозначил радиобокс с выбором _одного_ варианта)
Я так понимаю, что (A) - одноэлементный список, s-выражение, а форма - это
список из функции и ее аргументов (из первой лекции).
Поэтому (А) - это не форма по определению.
Еще вопрос.
Если в COND в одной из ветвей пропущен предикат, то будет ли выполняться ее
выражение.
Hапример, для e3 и p1=p2=Nil: (COND (p1 e1) (p2 e2) (e3))
Что в этом случае будет результатом?
Михаил
MNK> Изучая Лисп по http://www.intuit.ru/department/pl/lisp/ (у меня
локальная
MNK> версия), застрял на тесте к 4-й лекции
MNK> http://www.intuit.ru/department/pl/lisp/4/ То ли бестолковый, то ли
лекции
MNK> написаны небрежно.
не читайте советских газет..
MNK> Спорадически набираю 8 из 10 правильных ответов, к сожалению, на часть
MNK> отвечаю, просто подставляя в GNU Lisp.
gcl? одна из худших реализаций
MNK> Я так понимаю, что (A) - одноэлементный список, s-выражение, а форма -
MNK> это список из функции и ее аргументов (из первой лекции).
из глоссария спецификации:
form n. 1. any object meant to be evaluated. 2. a symbol, a compound form,
or a self-evaluating object.
то есть форма -- это нечно, предназначеное для исполнение.
MNK> Поэтому (А) - это не форма по определению.
как раз (A) -- форма по любому определению. это вызов функции A без
аргументов -- пустой список аргументов ведь тоже список :)
MNK> Еще вопрос.
MNK> Если в COND в одной из ветвей пропущен предикат, то будет ли
MNK> выполняться ее выражение.
MNK> Hапример, для e3 и p1=p2=Nil: (COND (p1 e1) (p2 e2) (e3))
MNK> Что в этом случае будет результатом?
опять же, смотрим в стандарт:
Macro COND
Syntax:
cond {clause}* => result*
clause::= (test-form form*)
то есть, предикат не может быть пропущен. может быть пропушено выражение --
то есть если предикат удовлетворится, оно сразу же успешно выйдет из cond
(результатом будет NIL). логично, не правда ли?
к примеру:
(cond
((eql v 'abc) (print "ABC"))
((eql v 'def)) ;;do nothing
(t (print "something unexpected!")))
)
(With-best-regards '(Alex Mizrahi) :aka 'killer_storm)
"choose no life")
Интуит - говно.
Изучай по practical common lisp. Ещё sicp хорошо, но там scheme.
--
rk
Логично, но неверно. Если выражений в ветке COND нет, возвращается
значение предиката. Hапример:
CL-USER> (defun f (x)
(member x '(7 5 8)))
F
CL-USER> (cond ((f 3))
((f 5)))
(5 8)
??>> Macro COND
??>> то есть, предикат не может быть пропущен. может быть пропушено
??>> выражение -- то есть если предикат удовлетворится, оно сразу же
??>> успешно выйдет из cond (результатом будет NIL). логично, не правда ли?
a> Логично, но неверно. Если выражений в ветке COND нет, возвращается
a> значение предиката.
да, так даже более логично :)
>>>>> "RK" == Ruslan Kosolapov writes:
MNK> Изучая Лисп по http://www.intuit.ru/department/pl/lisp/ (у меня
MNK> локальная версия), застрял на тесте к 4-й лекции
RK> Интуит - говно.
RK> Изучай по practical common lisp. Ещё sicp хорошо, но там scheme.
А если посмотреть на http://pcl.catap.ru/doku.php, то можно увидеть там
начало русского перевода.
Замечания приветствуются
--
With best wishes, Alex Ott, MBA
http://alexott.blogspot.com/ http://content-filtering.blogspot.com/
http://alexott-ru.blogspot.com/ http://content-filtering-ru.blogspot.com/
http://xtalk.msk.su/~ott/