Измените обработку cond

В языке Scheme есть дополнительная разновидность синтаксиса вариантов cond , (<test> => <recipient>) . Если результат вычисления <test> оказывается истинным значением, то вычисляется <recipient> . Его значение должно быть одноместной процедурой; эта процедура вызывается со значением <test> в качестве аргумента, и результат этого вызова возвращается как значение выражения cond . Например,

(cond ((assoc ’b ’((a 1) (b 2))) => cadr)
      (else false))

имеет значение 2 . Измените обработку cond так, чтобы она поддерживала этот расширенный синтаксис.


    # g7845123
    1 год назад

    I think the test code won't work as expected. For example, when running the first test case

    (check-equal? (eval (cond ((assoc 'b '((a 1) (b 2))) => cadr) (else #f)) the-global-environment) 2)

    The cond will be evaluated before calling eval (applicative order). In other words, the above test case will actually be

    (check-equal? (eval 2 the-global-environment) 2)

    When calling eval, the formal parameter exp will be 2, not a list expected

Необходима авторизация

Вы должны авторизоваться для создания комментария.

Вход