Primitive.java はまるごと差し替えが可能ですので、 Primitive.java はサンプル程度に考えてもらえればうれしいです。 そういう意図もあって、このテキストはドキュメント本体から分離してあります。
関数書式/戻り値 | 機能 | 説明 |
---|---|---|
(import "CLASSNAME") →NAtom(読まれた関数の数) |
Java で記述された拡張関数を読み込む | Primitive のような、
Mio Lisp の拡張クラス形式(LispFunction インターフェイスを継承)の
.class ファイルを読み込み、決まったシグネチャをもつ static メソッド
を発見すると、その名称のシンボルのグローバル値にそのメソッドに
対応する Method オブジェクトを代入します。
引数はクラス名を表す文字列(.class は不要)です。
(備考:Primitive から、GetNative での実装に変更されました。 (import "CLASSNAME") に限り、なにもロードしない状態でも実行できます。(98/3/6)) |
(load "FILENAME") →t |
Lisp プログラムを読み込み、評価する | 指定されたファイル名の Lisp ソースプログラムを EOF まで順次 評価しながら読み込みます。途中で評価エラーが発生した場合は、 その時点で中断されます。 |
(quit) →なし |
Lisp トップレベルを終了する | - |
関数書式/戻り値 | 機能 | 例 |
---|---|---|
(car x)→Object | x が Cons の時、 x の car を得る。 |
(car '(a b c))→a |
(cdr x)→Object | x が Cons の時、 x の cdr を得る。 |
(cdr '(a b c))→(b c) |
(cons x y)→Cons | x を car に、y を cdr にもつ Cons を新たに作成して返す |
(cons 'a '(b c))→(a b c) (cons 'a 'b)→(a . b) |
(list x ....)→Cons | 引数をリストにして返す |
(list 'a '(b c))→(a (b c)) (list 'a 'b 'c)→(a b c) |
(append x y)→Cons | リスト x に y を繋いだ新たなリストを作成して返す |
(append '(a c) '(b c))→(a c b c) |
(reverse x)→Cons | x のトップレベルを逆転したリストを新たに作成して返す。 | (reverse '(a b c))→(c b a) |
(rplaca x y)→Cons | コンス x の Car 部を y で置換し、x を返す | (rplaca '(1 2) 3)→(3 2) |
(rplacd x y)→Cons | コンス x の Cdr 部を y で置換し、x を返す | (rplacd '(1 2) 3)→(1 . 3) |
(quote x)→Object | x を評価せずそのまま返す | ' 記号でも書ける (quote a)→a '(1 2 3)→(1 2 3) |
(backquote x)→Object | x を評価せずコピーして返す |
` 記号でも書ける ,(カンマ) ,@(カンマ+アット) が現れた場合、 その部分だけ評価してリストに埋め込む。 主にマクロ定義で使用 x == (1 2) のとき `(test ,x ,@x)→(test (1 2) 1 2) |
関数書式/戻り値 | 機能 | 例 |
---|---|---|
(atom x)→t or nil | x が Atom なら t を、 そうでないとき nil を返す |
(atom 'a)→t (atom (cons 'a 'b))→nil |
(null x)→t or nil | x が nil なら t を、 そうでないとき nil を返す |
(null nil)→t (null 'a)→nil |
(eq x y)→t or nil | x と y が 同一オブジェクトなら t を、 そうでないとき nil を返す |
(eq 'y 'y)→t (eq '(1 2) '(1 2))→nil |
(equal x y)→t or nil | x と y が 同一リストなら t を、 そうでないとき nil を返す |
(equal 'y 'y)→t (equal '(1 2) '(1 2))→t (equal '(1 2) '(1 3))→nil |
関数書式/戻り値 | 機能 | 例 |
---|---|---|
(if x y [<z> .....])→t or nil | x の評価結果が nil 以外なら y 式を評価、 nil の時 z 式以下を評価し、その値を取る |
(if t 1 2 3)→1 (if nil 1 2 3)→3 |
(cond ((c1 [t1 ....]) [(c2 [t2 ....])] .... ))→Object |
c1 の評価結果が nil 以外なら t1 式以下を評価、
そうでないとき c2 以下を同様に繰り返し、
最後の式の値をとる。tn 式が無い場合、cn の値を返す。
if c1 then t1 に相当
|
(cond (((eq 'a 'b) 1) (t 2))→2 |
(setq x y)→Object | 現在のスコープの x に y を束縛する。 | (setq x '1)→1 |
(define x y)→SAtom | 大域値として x に y を束縛する。 | (define x '1)→x |
(progn e1 [e2 ... en])→Object | 式を順に評価し、最終式の評価結果を値に取る | (progn 1 2 3 4)→4 |
(prog1 e1 [e2 ... en])→Object | 式を順に評価し、第1式の評価結果を値に取る | (prog1 1 2 3 4)→1 |
(lambda ([arglist]) [body])→Lambda | Lambda 関数オブジェクトを作成する |
(lambda (x) x)→ #<javaobject : Lambda@xxxxx> |
(macro ([arglist]) [body])→Lambda | Macro 関数オブジェクトを作成する |
(macro (x) x)→ #<javaobject : Macro@xxxxx> |
(funcbody f)→Cons | 関数オブジェクト f の実体部を返す | (funcbody myfunc)→((if (eq x y) t)) |
関数書式/戻り値 | 機能 | 例 |
---|---|---|
(print x [y ...])→t | 引数を順次評価して出力 | (print 1 2 3)→t "1 2 3" |
(eval x)→Object | (引数として評価済みの)x を評価した結果を返す |
(eval '(print 1 2 3)) →t "1 2 3" |
(mapcar f l)→Object | 1 引数の関数オブジェクト f を、 l のトップレベルに順次適用した結果のリストを返す |
(mapcar (lambda (x) (if (eq x 'a) 1 0)) '(a a b b a) ) →(1 1 0 0 1) |
(envaslist)→Cons | 現在の環境辞書をリストにして返す | (envaslist)→..... |
(env)→Environment | 現在の環境辞書オブジェクト実体を返す | (env)→ #<javaobject : Environment@xxxxx> |
以下、工事中
Mio Lisp に関しての感想、御意見は、にしやま mio@mio.rim.or.jpまで。