Scheme 只评估一次价值

Scheme 只评估一次价值,scheme,racket,Scheme,Racket,如果没有让(gx)只计算一次的帮助,我如何更改代码 (define f (lambda (x) (i (g x) (h (g x))))) 您可以使用let编写解决方案,然后使用let和lambda之间的以下等价关系对其进行转换: (let ((name expression1)) expression2) == ((lambda (name) expression2) expression1) 您可以使用let编写解决方案,然后使用let和lambda之间的以下

如果没有让(gx)只计算一次的帮助,我如何更改代码

(define f 
  (lambda (x)
      (i (g x) (h (g x)))))

您可以使用
let
编写解决方案,然后使用
let
lambda
之间的以下等价关系对其进行转换:

(let ((name expression1))
   expression2)

==

((lambda (name) expression2) expression1)

您可以使用
let
编写解决方案,然后使用
let
lambda
之间的以下等价关系对其进行转换:

(let ((name expression1))
   expression2)

==

((lambda (name) expression2) expression1)

如果不允许使用let,我将在
定义
中使用
定义

(define f 
  (lambda (x)
    (define y (g x))
    (i y (h y))))

然而,我想另一个答案是理想的。因为它使用万能的lambda(
:)。

如果不允许let,我会在
定义中使用
定义

(define f 
  (lambda (x)
    (define y (g x))
    (i y (h y))))

然而,我想另一个答案是理想的。因为它使用万能的lambda(
:)。

为什么“没有
let
”的帮助?”?您使用的语言是否没有
let
,例如BSL?或者是因为家庭作业或其他原因造成的其他限制?由于我们的家庭作业,我们不允许使用let…为什么“没有
let
”的帮助?您使用的语言是否没有
let
,例如BSL?或者是家庭作业或其他什么的限制?由于我们的家庭作业,我们不允许使用let…当您使用内部定义时,您不应该进一步缩进正文:
(i y…)
应与前一行处于相同的缩进级别。使用内部定义时,不应进一步缩进正文:
(i y…
应与前一行处于相同的缩进级别。