ProgrammingのTipなど

変数宣言

Schemeにもグローバル変数とローカル変数があります
変数の型は指定する必要はありません
グローバル変数
defineを使いグローバル変数を定義します
グローバル変数とは同一ソースのプログラムのどこからでもアクセスできる変数のことです

(ちなみにSchemeではdefineで関数の定義もできます)
(define 変数名 値)
で変数宣言とともに束縛(代入)します
(define x1 100909)
再定義
C++やPythonなどの多くの手続き型言語と違い
Schemeのような関数型言語の考え方は
一度束縛(代入)した変数の値は基本的に変えるべきではないとしています

しかしschemeではset!を使うことで例外的に
変数の値を再定義して変更することができます

(set! x1 555)
>>555

注意:関数型言語では一般に
値が途中で変わることを副作用と言い
関数型言語ではこれを防ぐことでプログラムが堅牢になると考えられています
なので関数型言語の考え方に従ったプログラミングをするならば
set!を使うのはやむを得ない場合だけにし
慎重にしておいたほうが良いでしょう
let ローカル変数(局所変数)
(let )文内だけで使える局所変数
変数が1個の場合
(let ((変数名 値))
     命令)
変数が複数の場合
(let ((変数名 値)(変数名 値))
     命令)
a1に5を代入しa2に2を代入してからa1+a2を表示する文
a1やa2に(let )文の外から使おうとするとエラーになることに注意
(let ((a1 5)(a2 2))
  (display (+ a1 a2))
)
>>7
;let文の外でこれをやるとエラーになる
(+ a1 a2)
ネストするlet文
letは何重にもネストさせて書くことができます

xに2yに5を代入し
2*5=10をzに代入してからzに7をかける文
(let ((x 2) (y 5))
     (let ((z (* x y))) (* z 7))
            )
>>70
[]カッコについて
通常S式に使われるカッコは()ですが
[]も()と同じものとして使えます
特にlet文では()カッコが多重になりやすいので[]も慣習的に使われることが多いです
(let ([a1 5][a2 2])
  (display (+ a1 a2))
)

let*
letでは変数の初期代入宣言内ではまだ変数を使えないが
(次の例では(a2 (+ a1 5))の部分ではa1はまだ使えない)
let*なら使うことができる
例文
(let* ((a1 5)(a2 (+ a1 5)))
  (display (+ a1 a2))
)

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

メニュー2

開くメニュー

閉じるメニュー

  • アイテム
  • アイテム
  • アイテム
【メニュー編集】

管理人/副管理人のみ編集できます