Mio Lisp Function Reference Release 0.2 (98/6/3)

Mio Lisp に附属する Java で定義される基本関数のリファレンス(作成中)です。 注意すべき点は、「こう動作してほしいな」ということが書いてあるのであって、 現状の Mio Lisp が「こう動作する」とは限らないことです。

Primitive.java はまるごと差し替えが可能ですので、 Primitive.java はサンプル程度に考えてもらえればうれしいです。 そういう意図もあって、このテキストはドキュメント本体から分離してあります。


1.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
elseif c2 then t2 ...
に相当
(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>


2.Callnative.java で定義(実装)されている関数

以下、工事中

Mio Lisp に関しての感想、御意見は、にしやま mio@mio.rim.or.jpまで。