小编Jam*_*son的帖子

我该怎么做这个尾递归?

我有这个代码:

(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.有人能指出我正确的方向!

scheme

9
推荐指数
1
解决办法
147
查看次数

在计划中使用多个lambdas意味着什么?

我正在学习计划,我遇到了这些功能:

(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

3
推荐指数
1
解决办法
553
查看次数