我有这个代码:
(define (prog1 x y)
(let ([rel (related x y)])
(cond
[(null? rel) (list x)]
[else (cons x (map (lambda (d) (prog1 (neighbour d) y)) rel))])))
Run Code Online (Sandbox Code Playgroud)
我想做的是尝试使其尾递归.我知道我需要做的事情如下:
(define (prog1 x y)
(prog1-iter x y `()))
(define (prog1-iter x y acc)
(...
))
Run Code Online (Sandbox Code Playgroud)
但我不确定如何从我的代码转到这段代码...我认为这是因为原版中有一张地图,我不确定如何将其合并到一个prog1-iter.有人能指出我正确的方向!
我正在学习计划,我遇到了这些功能:
(define t (lambda (x) (lambda (y) x)))
(define f (lambda (x) (lambda (y) y)))
Run Code Online (Sandbox Code Playgroud)
显然,它们是真假的功能.我不知道为什么!
我有两个问题:
1)连续的lambdas是什么意思?我只习惯看到一个用于将参数传递给函数的lambda; 即
(define add
(lambda (x y)
(+ x y)))
Run Code Online (Sandbox Code Playgroud)
通过调用(add 1 5)我将6作为输出提供.
2)如何使用这些真假函数?
lambda scheme functional-programming lambda-calculus currying