在没有让(g x)仅被评估一次的情况下,如何更改代码?
(define f
(lambda (x)
(i (g x) (h (g x)))))
答案 0 :(得分:2)
您可以使用let
编写解决方案,然后使用let
和lambda
之间的以下等价形式对其进行转换:
(let ((name expression1))
expression2)
==
((lambda (name) expression2) expression1)
答案 1 :(得分:1)
如果不允许let,我会在define
内使用define
:
(define f
(lambda (x)
(define y (g x))
(i y (h y))))
但是,我想另一个答案就是想要的答案。因为它使用了全能的lambda
:)。