Schemeで変数を定義する
※ 以下はScheme初心者である私の勉強用のメモです。
間違っている可能性がありますので注意してください。
変数
変数を定義するにはlet式を使用する。
一般形
(let ((変数名1 初期値1) (変数名2 初期値2) (・・・ ・・・) (変数名n 初期値n)) 式・・・)
注意点
- let式では複数の変数を同時に定義できる。
- 複数の変数を同時に定義したとき、例えば2つ目の変数の初期値に1つ目で定義した変数を使うことはできない。
- let式で定義した変数はlet式のブロック内でのみ有効。(レキシカルスコープ)
- let式は入れ子にできる。
例1
; 変数valを宣言する (define let-test1 (let ((val 1)) val)) ; 実行例 > let-test1 1
例2
let式では複数の変数を同時に定義できる。
(define let-test2 (let ((val_01 1) (val_02 2) (val_03 (+ 1 2))) (+ val_01 val_02 val_03))) ; 実行例 > let-test2 6
例3
複数の変数を同時に定義したとき、例えば2つ目の変数の初期値に1つ目で定義した変数を使うことはできない。
(define let-test3 (let ((val_01 1) (val_02 (+ val_01 2))) (+ val_01 val_02))) ; 実行するとエラーが発生する val_01: name is not defined, not a parameter, and not a primitive name
例4
例3のような場合はlet式を入れ子にするか、let*を使用する。
(define let-test4 (let ((val_01 1)) (let ((val_02 (+ val_01 2))) (+ val_01 val_02)))) ; 実行例 > let-test4 6
例5
let式で定義した変数はlet式のブロック内でのみ使用することができる。
(define let-test5 (let ((val 1)) ) val) ; 実行するとエラーが発生する define: expected only one expression after the defined name let-test5, but found one extra part