相关疑难解决方法(0)

尾递归版本列表附加函数

我看到了几个append向列表实现元素的例子,但都没有使用尾递归.如何在功能风格中实现这样的功能?

 (define (append-list lst elem) expr)
Run Code Online (Sandbox Code Playgroud)

lisp scheme tail-call-optimization racket tailrecursion-modulo-cons

8
推荐指数
2
解决办法
3986
查看次数

方案:何时使用let,让*和letrec?

let,let*和letrec有什么区别?

请给出详尽的解释和例子.

scheme let

6
推荐指数
1
解决办法
1万
查看次数

Scheme/Racket中letrec的含义

所以,据我了解,以下内容:let,let*,letrecletrec*在方案/球拍使用人工合成的糖.

现在,如果我有一个简单的程序:

(let ((x 1)
      (y 2))
     (+ x y))
Run Code Online (Sandbox Code Playgroud)

它被翻译成:

((lambda (x y) (+ x y)) 1 2)
Run Code Online (Sandbox Code Playgroud)

如果我有:

(let* ((x 1)
      (y 2))
     (+ x y))
Run Code Online (Sandbox Code Playgroud)

它被翻译成:

((lambda (x) ((lambda (y) (+ x y))) 2) 1)
Run Code Online (Sandbox Code Playgroud)

现在,对于我的第一个问题,我理解一个letrec表达式的含义,它允许一个人在let中使用递归,但我不明白它是如何完成的.什么是letrec翻译成?

例如,会是什么

(letrec ((x 1)
      (y 2))
     (+ x y)) 
Run Code Online (Sandbox Code Playgroud)

被翻译成?

第二个问题是类似的letrec*- 但letrec*我不明白它究竟有何不同letrec?而且,letrec*表达式将被翻译成什么?

scheme let racket letrec

6
推荐指数
1
解决办法
1867
查看次数

如何表达let*作为lambda表达式(不是常规let)

我有一个与方案相关的问题,我们如何实现let*作为lambda表达式.更确切地说,我并不想知道"常规"允许,但是让我们使用*让我们使用一个让表达式在另一个中.

lambda scheme functional-programming sicp let

5
推荐指数
1
解决办法
222
查看次数

Let和Let*令人困惑的方案

(let ((x 2) (y 3)
  (let ((x 7)
        (z (+ x y)))
    (* z x)))
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,为什么答案35,而不是70?在第二个let,x是7所以z应该是7 + 3 = 10,然后结果应该是7*10 = 70.我知道另一个是让*我在这之间非常混乱2.样本是谷歌的抓取.我已经google但是无法得到它.

scheme let

4
推荐指数
1
解决办法
425
查看次数

Scheme中let和let*有什么区别?

我正在为GIMP编写一个脚本,并let*在我拍摄的样本中使用它.但它似乎只是一种lambda糖let.他们为什么不同?他们之间有什么区别?

lisp scheme gimp

4
推荐指数
1
解决办法
1482
查看次数

Scheme/Racket中lamb的lambda定义是什么?

今天我试着理解如何让我们在Scheme/Racket中使用lambda演算的上下文,但是我无法弄清楚如何将let的等效写为lambda函数.

我认为它的一般形式应该是这样的:

((lambda (p1 p2...) body) v1 v2...)
Run Code Online (Sandbox Code Playgroud)

但绝对不是一个完整的函数定义.

对此有正确/完整定义的想法吗?

先感谢您!

lambda scheme let racket

3
推荐指数
2
解决办法
481
查看次数