10

+を使用してスキームプログラムで演算子を再定義すると、予期しない結果が発生しましたguile。これは、言語を理解しようとする実験中に発生したことを指摘しておく必要があります。ここでは、便利なプログラムを作成する試みはありません。

コードは次のとおりです。

(define (f a b) 4)

(define (show)
  (display (+ 2 2)) (display ",") (display (f 2 2)) (newline))

(show)
; guile & mit-scheme: "4,4"

(define (+ a b) 5)
(define (f a b) 5)

(show)
; mit-scheme: "5,5"
; guile: "4,5" - this "4" is the unexpected result

(define (show)
  (display (+ 2 2)) (display ",") (display (f 2 2)) (newline))

(show)
; guile & mit-scheme: "5,5"

guile関数では、の新しい定義を使用していますが、再定義した後showでもの定義済みの定義を使用しています。の新しい定義を認識させるには、再定義する必要があります。どちらの新しい定義でもすぐに認識されます。これは私が期待していたことです。また、のそれ以上の定義は、再定義することなく、両方のインタプリタによって即座に認識されます。+fshow+mit-scheme+show

guileこれらの再定義された演算子への参照を異なる方法でバインドするために、舞台裏で何が起こっていますか?

そして、なぜ2人の通訳者の違いは?

4

1 に答える 1