GNU bug report logs -
#22812
24.5: elisp manual about pcase
Previous Next
Reported by: Zhaohui Li <lizhaohui1991 <at> gmail.com>
Date: Fri, 26 Feb 2016 02:35:02 UTC
Severity: minor
Found in version 24.5
Done: Michael Heerdegen <michael_heerdegen <at> web.de>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
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~
[Message part 2 (text/html, inline)]
This bug report was last modified 9 years and 88 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.