bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#22812: 24.5: elisp manual about pcase


From: Zhaohui Li
Subject: bug#22812: 24.5: elisp manual about pcase
Date: Fri, 26 Feb 2016 10:08:09 +0800

The "10.2.1: Pattern matching case statement" in Emacs Lisp Referrence Manual has a problem.
The second example in manual is:
       (defun evaluate (exp env)
       (pcase exp
         (`(add ,x ,y)       (+ (evaluate x env) (evaluate y env)))
         (`(call ,fun ,arg)  (funcall (evaluate fun env) (evaluate arg env)))
         (`(fn ,arg ,body)   (lambda (val)
                               (evaluate body (cons (cons arg val) env))))
         ((pred numberp)     exp)
         ((pred symbolp)     (cdr (assq exp env)))
         (_                  (error "Unknown _expression_ %S" exp))))
 
The problem is about the third case: `(fn , arg ,body).
I test this function with:
(evaluate '(call
            (fn x (add 1 x))
            2)
          nil)
emcas eval it with throw errors.

I think the correct of this function should be:
(defun evaluate (exp env)
  (pcase exp
    (`(add ,x ,y)
     (+ (evaluate x env)
        (evaluate y env)))
    (`(call ,fun ,arg)
     (funcall (evaluate fun env)
              (evaluate arg env)))
    (`(fn ,arg ,body)
     `(lambda (val)
        (evaluate ',body (cons (cons ',arg val) env))))
    ((pred numberp)
     exp)
    ((pred symbolp)
     (cdr (assq exp env)))
    (_
     (error "Unknown _expression_ %S" exp))))


Thanks~

reply via email to

[Prev in Thread] Current Thread [Next in Thread]