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