Modify the handling of cond

Scheme allows an additional syntax for cond clauses, (<test> => <recipient>) . If <test> evaluates to a true value, then <recipient> is evaluated. Its value must be a procedure of one argument; this procedure is then invoked on the value of the <test> , and the result is returned as the value of the cond expression. For example

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

returns 2 . Modify the handling of cond so that it supports this extended syntax.


    # g7845123
    1 year ago

    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

Authentication required

You must log in to post a comment.

Login