From: Eli Bendersky
Subject: lambda returning lambda
Date: 
Message-ID: <cedc9f$bu0@odah37.prod.google.com>
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
From: Albert Reiner
Subject: Re: lambda returning lambda
Date: 
Message-ID: <vw8wu0lr9gv.fsf@berry.phys.ntnu.no>
> (((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.