やろーじだい

ブログと技術メモです。なにかあればより詳細に書こうということで最初は雑に書くようにしています。質問・要望等あれば Twitter かコメントに下さい。

The SICP Picuture Language を利用する際に発生した問題と解決方法

勉強会中に図形言語を導入しようとした際、参加者全体でいくつかつまずいてしまい時間がかかったのでまとめる。

https://planet.racket-lang.org/package-source/soegaard/sicp.plt/2/1/sicp-manual.html

ライブラリがロードできない

> (require (planet "sicp.ss" ("soegaard" "sicp.plt" 2 1)))

上記関数を repl で実行するとエラーが出てしまう。 (エラー文の記録を忘れてしまった)

解決方法

以下のように scheme(racket) ファイルに記述して load する。

#lang racket

(require (planet "sicp.ss" ("soegaard" "sicp.plt" 2 1)))

(paint diagonal-shading)
> (load "filename")

画像を表示できない

コマンドライン上で起動した Racket で画像を表示しようとした場合や、上記のように scheme ファイルを利用しても表示がされない。または以下のようなエラーが出てしまう。

> (require (planet "sicp.ss" ("soegaard" "sicp.plt" 2 1)))
> (paint diagonal-shading)
; paint: undefined;
;  cannot reference undefined identifier
; [,bt for context]

解決方法

一般

勉強会参加者は Racket の IDE である DrRacket を利用することにした。

Emacs ユーザーの場合

Emacs ユーザーの場合は racket-moderacket-repl を利用することで画像の表示ができることが確認できた。まず M-x racket-repl で repl を起動する。次に (require (planet "sicp.ss" ("soegaard" "sicp.plt" 2 1))) のコードを書いたバッファーを C-c C-kコンパイルし、(paint diagonal-shading) などを実行する。

#

全体的に名前空間による問題であるように思えたのだが、この図形言語を使う範囲はそこまで広くなかったので一時的な解決に留めた。ターミナル上の repl などでも表示する方法がわかり次第更新する。