Il mio amico me lo mostra e sono davvero curioso del perché funzioni così. Ho in un primo momento pensato che sta andando essere un errore di sintassi, ma non è così ... Here're alcuni dei miei esperimenti:Cos'è (lambda lambda lambda)?
> (lambda lambda lambda)
#<procedure>
> ((lambda lambda lambda))
'()
> ((lambda lambda lambda) 1 2 3 4 5 6 7)
'(1 2 3 4 5 6 7)
> (lambda lambda foo)
#<procedure>
> ((lambda lambda foo))
foo: undefined;
cannot reference an identifier before its definition
> (lambda lambda 1 2 3 4 5)
#<procedure>
> ((lambda lambda 1 2 3 4 5))
5
> (lambda foo lambda)
. lambda: bad syntax in: lambda
> (lambda 1 2 3)
. lambda: bad argument sequence in: 1
> ((lambda) 1 2 3)
. lambda: bad syntax in: (lambda)
Così sembra:
- In
lambda
,lambda
potrebbe essere arg-ids? - In
lambda
,lambda
potrebbe essere un costruttore di elenchi?
Questo collegamento ha più dettagli: https://docs.racket-lang.org/reference/lambda.html –
Thx :) In effetti, il link che ho postato menzionato 'rest-id' pure in 4.4.1, ma non l'ho visto! –
Sì. Tuttavia, c'è un altro caso strano che questo non spiega. '(lambda lambda foo)' = '#'. Ed è perché questo è in un REPL, dove puoi fare '(define (f x) foo ') e poi definire pippo in seguito, in modo che per esempio la ricorsione reciproca funzioni. Ma per queste cose, dovresti davvero metterle in un file, perché è quello che mostrerà il loro vero comportamento. In un file di per sé, '(lambda lambda foo)' sarà un errore, come dovrebbe. –