Hi all,
I know I can use a lambda function call as follows:
(funcall #'(lambda (x) (* x 2)) 10)
The following also works (clisp):
((lambda (x) (* x 2)) 10)
However, I want to move one step further. That is:
(((lambda (y) (lambda (x) (* x y))) 10) 2)
But on this I get:
*** - EVAL: ((LAMBDA (Y) (LAMBDA (X) (* X Y))) 10) is not a function
name
This, however, works:
((lambda (y) ((lambda (x) (* y x)) 10)) 2)
What's going on here ?
Thanks in advance !
Eli
> (((lambda (y) (lambda (x) (* x y))) 10) 2)
You want to use funcall as ((lambda (y) (lambda (x) (* x y))) 10)
returns a function
,----
| (funcall ((lambda (y) (lambda (x) (* x y))) 10) 2)
| 20
`----
> This, however, works:
>
> ((lambda (y) ((lambda (x) (* y x)) 10)) 2)
Because you call the function (lambda (y) ((lambda (x) (* y x)) 10))
with argument 2, which results in the function (lambda (x) (* y x))
being called with argument 10 and y bound to 2.
Albert.