講義資料 プログラミング言語(Scheme)

第1回講義「導入、プログラムの基礎」 第1回講義レジュメ
第2回講義「関数と置き換えモデル」 第2回講義レジュメ
第3回講義「条件式と述語」 第3回講義レジュメ
第4回講義「再帰と反復」 第4回講義レジュメ
第5回講義「高階関数」 第5回講義レジュメ
第6回講義「データ構造とリスト」 第6回講義レジュメ
第7回講義「リストと高階関数」 第7回講義レジュメ
第8回講義「記号」 第8回講義レジュメ
第9回講義「代入」 第9回講義レジュメ
第10回講義「可変リスト」 第10回講義レジュメ
第11回講義「可変データ応用」 第11回講義レジュメ
第12回講義「ストリーム」 第12回講義レジュメ
第13回講義「無限ストリーム」 第13回講義レジュメ
第14回講義「配列、ガーベージコレクション」 第14回講義レジュメ
講義「環境モデル」 講義レジュメ
講義「メタサーキュラーインタプリタ」 講義レジュメ

関数一覧

制御関係

関数名使い方説明
define(define x y)
(define (f x1 x2 ... xn) y1 y2 ... yn)
変数xの値をyの値で定義する(束縛する)。xには変数のみ記述できる。
引数x1,..,xnをとる関数fを定義する。関数fの内容は式y1,...,ynに記述する。 関数fが評価されれば、y1から順に評価され、最後のynの値が関数fの返値として返される。
set!(set! x y)変数xの値をyの値で再定義する。
cond(cond (c1 e1)...(cn en) (else e))条件式c1からcnを順に評価し、最初に真(#t)となった条件式ciに対し、eiが評価され、eiの値がcond文の返値として返される。どの条件式も偽(#f)となる場合はelseの中の式eが評価される。
if(if c e1 e2)条件式cが真(#t)ならe1を評価しその結果をifの返値として返す。偽(#f)ならe2を評価しその結果をifの返値として返す。
lambda(lambda (x1 x2 ... xn) y1 y2 ... yn) λ式を定義する。x1,...,xnを引数として受け取り、y1からynまで順に評価される関数を返す。この関数が評価されれば、y1からynまで順に評価し、最後のynの評価結果を関数の返値として返す。
let(let ((x1 y1) (x2 y2) ... (xn yn)) e1 e2 ... en)変数x1からxnに対し、それぞれy1,...,ynの値を束縛し、e1からenまでを評価し、enの評価結果をlet文の返値として返す。x1からxnの変数名が有効なのはこのlet文内だけである。
begin(begin e1 e2 ... en)e1,...,enを順に評価し、最後のenの返値をbegin全体の返値として返す。
apply(apply f xs)リストxs=(x1 x2 ... xn)に対し、(f x1 x2 ... xn)を評価する。
display(display x)xを表示する。
load(load x)ファイルxを読み込む。
error(error x1 x2 ... xn)非組み込み関数。エラーメッセージx1,x2,...,xnを表示し、エラーを返す。


数値演算関係

関数名使い方説明
+, -, *, /, remainder(+ x1 ... xn), (- x1 ... xn), (* x1 ... xn),
(/ x1 ... xn), (remainder x y)
和(+)、差(-)、積(*)、商(/)、余り(remainder)
-(- x)xの符号を反転させた値を返す。(* -1 x)と同じ。
abs(abs x)xの絶対値を返す。
exp, expt, log(exp n), (expt x y), (log x)指数や対数の計算をする関数。(exp n)はeのn乗。(expt x n)はxのn乗。logは自然対数。
min, max(min x1 ... xn), (max x1 ... xn)minはx1,...,xnの中で一番小さな数値を返す。maxはx1,...,xnの中で一番大きな数値を返す。
square(square x)非組み込み関数。xの2乗を計算。
cube(cube x)非組み込み関数。xの3乗を計算。
=, <, >, <=, >=(= x y) (< x y) (> x y) (<= x y) (>= x y)等号、不等号。
and, or, not(and x1 x2 ... xn), (or x1 ... xn), (not x)論理積、論理和、否定。
number?(number? x)xが数ならば#tを返す。そうでなければ#fを返す。
even?, odd?(even? x), (odd? x)xが偶数かどうかを判定する述語(even?), xが奇数かどうかを判定する述語(odd?)
gcd(gcd x y)xとyの最大公約数を計算。


リスト関係

関数名使い方説明
cons(cons x y)xとyのペアを生成する。
car(car x)ペアxの第一要素を返す。
cdr(cdr x)ペアxの第二要素を返す。
list(list x1 x2 ... xn)x1,...,xnを要素とするリストを生成する。
length(length x)リストxの長さを返す。
list-ref(list-ref x n)リストxのn+1番目の要素を返す。
append(append x y)リストxとリストyを連結したリストを返す。
reverse(reverse x)リストxを逆順に並べたリストを返す。
map(map f x)関数fとリストx(=(x1,...,xn))に対し、(list (f x1) (f x2) ... (f xn))を評価した結果を返す。
filter(filter c x)非組み込み関数 リストxの各要素xiのうち条件式(c xi)が真となる要素だけを並べたリストを返す。
reduce(reduce f ini x)非組み込み関数 リストx(=(x1 x2 ... xn))に対し、(f x1 (f x2 ... (f xn ini)))を評価した結果を返す。
range(range x y)非組み込み関数 整数xから整数yまで並べたリストを返す。
for(for x f)非組み込み関数 リストx(=(x1 x2 ... xn))と関数fに対し、(f x1),..,(f xn)を順に評価する。返値はない。また、引数の順番が逆になったfor-eachという組み込み関数も存在する。
for-each(for-each f x)(for x f)と同じ。
assoc(assoc key x)連想リストx(=((k1 v1) (k2 v2) ... (kn vn)))に対し、key=kiとなる要素をk1からknまで順に探し、key=kiとなるkiがみつかれば(ki vi)を返す。見つからなければ偽(#f)を返す。
null?(null? x)リストxが空リストかどうかを判定する。
pair?(pair? x)xがペアかどうかを判定する。


記号関係

関数名使い方説明
eq?(eq? x y)記号xとyの等価性を判定。オブジェクトxとyの構造共有を判定。
memq(memq x l)xがリストlの要素であるかどうか判定する。そうであれば、xが最初に現れるところから始まるリストを返す。そうでなければ#fを返す。判定にはeq?を使う。
symbol?(symbol? s)sが記号なら#tを返す。そうでなければ#fを返す。


ストリーム関係

関数名使い方説明
stream-car(stream-car s)非組み込み関数 stream用のcar。ストリームsの先頭の要素を返す。
stream-cdr(stream-cdr s)非組み込み関数 stream用のcdr。 ストリームsの先頭要素を除いた残りのストリームを返す。
stream-ref(stream-ref s n)非組み込み関数 stream用のref。ストリームsのn+1番目の要素を返す。
stream-range(stream-range s e)非組み込み関数 stream用のrange。整数sから始まって整数eまでを要素とするストリームを返す。
stream-map(stream-map f s)非組み込み関数 stream用のmap。ストリームsの各要素に対してfを適用したストリームを返す。
stream-for(stream-for s f)非組み込み関数 stream用のfor。ストリームsの各要素に対しfを実行する。
stream-filter(stream-filter p s)非組み込み関数 stream用のfilter。ストリームsのうちpの条件を満たすものだけ残したストリームを返す。

配列関係

関数名使い方説明
vector?(vector? x)xが配列なら#tを返す。そうでなければ#fを返す。
vector(vector a1 a2 ... an) a1, a2, ..., anを要素とする配列を返す。
make-vector(make-vector k)k個の要素を持つ配列を返す。
make-vector(make-vector k fill) k個の要素を持つ配列を返す。ただし、各要素の値はfillとなる。
vector-ref(vector-ref x n)配列xのn+1番目の要素を返す。
vector-set!(vector-set! x n v)配列xのn番目の要素をvに設定する。
vector-length(vector-length x)配列xの大きさ(要素数)を返す。