scheme は関数型言語 lisp の方言の一つである.
関数型言語では,「<式>を<評価>して,<返り値>を得る」という計算を基本とする.
知能情報工学科の計算機には,DrScheme がインストールされている. DrScheme は,Scheme のプログラミング環境の一種である. ここがDrSchemeのホームページである:http://www.drscheme.org/ Windows 用もある.以下に主な操作方法を示す.
起動方法 | コンソール上で |
---|---|
ウインドウ | デフォルトでは幾つかのボタンと2つの白いエリアがある |
上のエリア:式を定義するエリア (Definitions) | |
下のエリア:対話的に式を評価(実行)するエリア (Interactions) | |
メニューの中の「View」の中の項目を操作することでウインドウの設定が可能※1 | |
マニュアル | メニューの中の「Help」の中の「Help Desk」より検索が可能 |
プログラムの作成 | Definitions に書き込む |
プログラムの実行 | Run ボタンを押した後,Interactions で,式を入力する(たとえば,関数に具体的な値を与える) |
プログラムの保存 | メニューの中の「File」の中の「Save Definitions」を選択する |
プログラムの読み込み | メニューの中の「File」の中の「Open」を選択する |
終了方法 | メニューの中の「File」の中の「Quit」を選択する |
※ Interactions を表示するには,「メニュー」の中の「View」の中の「Show Interactions」を選択する.
scheme で使用する主なデータを紹介する:
直感的にいえば,式は次の2通りがある.
引数を要するときは,括弧付きの書式となる.引数には,データだけでなく式も与えることができる.
Interactions 上に,式を入力して,Enterキーを押す.
データだけの式を評価してみよう.
> 100 ⇒ 100 が返り値となる > 3/4 ⇒ 分数を評価すると, |
簡単な式を評価してみよう.
> (- 5) ⇒ 単項演算 > (+ 1 2) ⇒ 2項演算 > (sqrt 2) ⇒ 組み込み関数 > (sin (/ pi 2)) ⇒ 引数部に式を与えている.数学の記法でいは,sin(π/2) のこと. |
定数の定義は,Definitions で
(define <名前> <式>) |
果物の名前と価格を定義し,その名前を使って,果物の代金を計算しよう.
価格は次のように設定する.
apple | 110 |
---|---|
orange | 90 |
pineapple | 230 |
peach | 190 |
例として,apple 3つ,orange 5つ,pineapple 1 つ,peach 5つの場合を計算しよう.
(define apple 110) (define orange 90) (define pineapple 230) (define peach 190) |
> (+ (* apple 3) (* orange 5) (* pineapple 1) (* peach 5)) |
上記の定数の定義をファイル「prac0601.scm」に保存してみよう.また,いったんdrscheme を終了し,再び起動して,定義ファイルを開いてみよう.
例題3の続きとする.贈り物用のフルーツセット(giftbox)には,メロンが1つ,林檎が5つ,オレンジが3つ入っている.メロンは単価が 800 円とする.giftbox の代金は,入っている果物の値段と箱代(box)50円の合計とする.giftbox の代金を定義しよう.
お得用フルーツセット(specialbox)には,1割引の桃が3つ,定価のパイナップルが1つ,2割引のオレンジが5つ入っている.specialbox の代金はそれらの果物の値段の和として箱代はサービスとする.specialbox の代金を定義しよう.
以上の定義を prac0602.scm に保存しよう.
関数の定義は,以下の書式で行う.
(define <名前> (lambda (<引数名> <引数名> …) |
簡単な式を定義してみよう.
(define square (lambda (x) (* x x))) (define increment (lambda (x) (+ x 1))) |
> (square 5) ⇒ 関数 square では 5 * 5 を計算 > (increment 4) ⇒ 関数 increment では 4 + 1 を計算 > (square (increment 4)) ⇒ 4 + 1 を先に計算 > (increment (square 4)) ⇒ 4 * 4 を先に計算 |
次の式を計算するための関数を定義せよ.以下を prac0603.scm としてセーブしよう.