использование лямбды вместо впущенного схема

В SICP 1.2.1 существует функция, которая делает рациональное число, следующим образом:

(define (make-rat n d)
  (let ((g (gcd n d)))
    (cons (/ n g) (/ d g))))

Мне просто любопытно, как можно реализовать то же самое с помощью лямбды вместо позволенного, не называя GCD дважды. Я не мог изобразить его сам.

7
задан CamelCamelCamel 25 May 2010 в 16:39
поделиться

2 ответа

Глядя на раздел 1.3.2 SICP ,

(let ((<var1> <exp1>)
      (<var2> <exp2>)
      ...
      (<varn> <expn>))
   <body>)

эквивалентен

((lambda (<var1> ...<varn>)
    <body>)
 <exp1>
 ...
 <expn>)

Таким образом, ваша процедура

(define (make-rat n d)
  (let ((g (gcd n d)))
    (cons (/ n g) (/ d g))))

должна быть эквивалентна

(define (make-rat n d)
  ((lambda (g)
    (cons (/ n g) (/ d g)))
  (gcd n d)))
13
ответ дан 6 December 2019 в 07:05
поделиться

Эти две вещи одинаковы:

((lambda (p1 p2...) body) v1 v2...)

и

(let ((p1 v1) (p2 v2)...) body)
10
ответ дан 6 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: