0
インナーリダクションとアウターリダクションは、異なるものを引き起こすものではない場合、常に同じ値を作成しますか?内側と外側の縮小、同じ結果ですか?
私は機能的な言語であるラケットについて話しています。
私は、ラケットのように実際に異なる結果を引き起こすようなより効率的な可能性を知っています。私はそれが起こるケースを作成することができませんでしたが、私はそれが可能でなければならない、おそらく知らないと危険なことがあるように感じます。
例:
;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! 'を使わない2番目の例を追加しました。 – melpomene
@Xanlantosあなたの先生が 'set! 'を知っているとは思っていますが、あなたの先生はそれを使わずにプログラムする方法を教えようとしています。 – molbdnilo