Оцените стоимость только один раз - PullRequest
0 голосов
/ 26 ноября 2018

Как я могу изменить код без помощи let, чтобы (gx) только что вычислялся один раз?

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

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Если let не разрешен, я бы использовал define внутри define:

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

Однако, я предполагаю, что другой ответ - желаемый.Потому что он использует всемогущий lambda :).

0 голосов
/ 27 ноября 2018

Вы можете написать решение с помощью let, а затем преобразовать его, используя следующую эквивалентность между let и lambda:

(let ((name expression1))
   expression2)

==

((lambda (name) expression2) expression1)
...