Измените обработку cond
В языке Scheme есть дополнительная разновидность синтаксиса вариантов
cond
,
(<test> => <recipient>)
. Если результат вычисления
<test>
оказывается истинным значением, то вычисляется
<recipient>
. Его значение должно быть одноместной процедурой; эта процедура вызывается со значением
<test>
в качестве аргумента, и результат этого вызова возвращается как значение выражения
cond
. Например,
(cond ((assoc ’b ’((a 1) (b 2))) => cadr)
(else false))
имеет значение
2
. Измените обработку
cond
так, чтобы она поддерживала этот расширенный синтаксис.
I think the test code won't work as expected. For example, when running the first test case
The
cond
will be evaluated before callingeval
(applicative order). In other words, the above test case will actually beWhen calling
eval
, the formal parameterexp
will be2
, not a list expected