Внутреннее и внешнее сокращение всегда создает одно и то же значение, если не то, что может вызвать разные?внутренний и наружный редукция, такой же результат?
Я говорю о Racket, функциональном языке.
Есть я знаю возможности, где это более эффективно, как в ракетке, но на самом деле вызывает другой результат. Я не смог создать случай, когда это произойдет, но я чувствую, что это должно быть возможно и, возможно, опасно не знать.
Пример:
;inner reduction
(sqr (* 3 (+ 1 (sqr 2))))
->(sqr (* 3 (+ 1 (* 2 2))) ;(sqr)
->(sqr (* 3 (+ 1 4)) ;(*)
->(sqr (* 3 5)) ;(+)
->(sqr 15) ;(*)
->(* 15 15) ;(sqr)
->225 ;(*)
;outer reduction
(sqr (* 3 (+ 1 (sqr 2))))
->(* (* 3 (+ 1 (sqr 2))) (* 3 (+ 1 (sqr 2))) ;(sqr)
->(* (* 3 (+ 1 (* 2 2))) (* 3 (+ 1 (sqr 2))) ;(sqr)
->(* (* 3 (+ 1 4)) (* 3 (+ 1 (sqr 2))) ;(*)
->(* (* 3 5) (* 3 (+ 1 (sqr 2))) ;(+)
->(* 15 (* 3 (+ 1 (sqr 2))) ;(*)
->(* 15 (* 3 (+ 1 (* 2 2))) ;(sqr)
->(* 15 (* 3 (+ 1 4))) ;(*)
->(* 15 (* 3 5)) ;(+)
->(* 15 15) ;(*)
->225 ;(*)
@ Xanlantos Я получил свой синтаксис с https://docs.racket-lang.org/guide/set_.html. Разве это не Ракетка? – melpomene
@ Xanlantos Я добавил второй пример, который не использует 'set!'. – melpomene
@ Xanlantos Я уверен, что ваш учитель знает о 'set!', Но пытается научить вас, как программировать без него. – molbdnilo