私は、Ableson/Sussman レクチャーと Berkeley 61A レクチャーの両方を使用して、SICP を進めています。バークレー校の宿題をしたいのですが、文の定義が必要ですが、butfirst、butlast などがあります。Dr.Scheme には単純なスキーム言語が組み込まれていたようですが、最新のバージョン 4.1.5 にはそれがありません。Planet PLTから 、定義ウィンドウに (require (planet "simply-scheme.ss" ("dyoo" "simply-scheme" 1 0))) を簡単に追加できると思いました。私は得る
require: PLaneT
could not find the requested package: Server had no matching package:
No package matched the specified criteria
ここから Simply.scm ファイルを取得 して Dr Scheme 定義ウィンドウに貼り付けようとしましたが、うまくいきません:
上級生モードでは、「.」の不正使用が読み取られます。
次のコードの行 (lambda (string . args) の場合。
(define whoops
(let ((string? string?)
(string-append string-append)
(error error)
(cons cons)
(map map)
(apply apply))
(define (error-printform x)
(if (string? x)
(string-append "\"" x "\"")
x))
(lambda (string . args)
(apply error (cons string (map error-printform args))))))
In R5RS I get set!: cannot mutate module-required identifier in: number->string (次のコードの 7 行目)
(if (char=? #\+ (string-ref (number->string 1.0) 0))
(let ((old-ns number->string)
(char=? char=?)
(string-ref string-ref)
(substring substring)
(string-length string-length))
(set! number->string
(lambda args
(let ((result (apply old-ns args)))
(if (char=? #\+ (string-ref result 0))
(substring result 1 (string-length result))
result)))))
'no-problem)