一次评估价值

时间:2018-11-26 20:49:19

标签: scheme racket

在没有让(g x)仅被评估一次的情况下,如何更改代码?

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

2 个答案:

答案 0 :(得分:2)

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

(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 :)。