Langphilia! /
KL1 /
KLIC-C /
Data Objects, 2001-10-22
Data Objects
Usage in KLIC-KL1 Language
- generic:GuardMehod( +Object, +Arg .. ): -Arg ..
- Object の GuardMethod を呼び出す。
ガードメソッドの出力引数は、表記が変わっていることに注意せよ。
- generic:BodyMethod( +Object, ?Arg .. )
- Object の BodyMethod を呼び出す。
- generic:generic( +Object, +BodyMethod( ?Arg .. ))
- Object の BodyMethod を呼び出す。
BodyMethod(Arg ..) をファンクタとして表記する
→ 呼び出すメソッドを動的に選択することができる。
float
- sign digits `.' digits ( `e' sign digits )?
- 定数表記 sign = `+' | `-' | `',
digits = ( `0' | `1' | `2' | `3' | `4' | `5' | `6' | `7' | `8' | `9' )+
- new +Init
- 整数 Init に数学的に等しい float オブジェクトを作る。
- -X $:= +Expression
- float 式 Expression の結果を変数 X に束縛する。
式の中で使える演算子は +/2, -/2, */2, `/'/2, pow/2,
sin/1, cos/1, tan/1, asin/1, acos/1, atan/1, sinh/1, cosh/1, tanh/1,
exp/1, log/1, sqrt/1, ceil/1, floor/1, float/1。対応するボディメソッドは
add/3, subtract/3, multiply/3, divide/3, OtherOPs/+1。+1は計算結果。
- $<, $=<, $>=, $>, $=:=, $=\= +X +Y
- float オブジェクト X,Y を比較する。対応するガードメソッドは
less_than, not_greater_than, not_less_than, greater_than, equal, not_equal
全て /2。
vector
- `{' ( Term ( `,' Term )* )? `}'
- 定数表記
- new +Init
- 整数 Init 個の 0 を要素に持つ vector オブジェクトを作る。
またはリスト Init の要素を要素に持つ vector オブジェクトを作る。
- vector, size -Size
- vector はガードメソッド、size はボディメソッド。要素数 Size を返す。
- element +Index -Element
- Index [0,*) 番目の要素 Element を返す。
- set_element +Index (?Element) ?NewElement -NewVector
- Index 番目の要素 Element を NewElement に換えた NewVector を返す。
- split +Index -Vector1 -Vector2
- [0,Index) 番目の要素を要素に持つ Vector1 と
[Index,*) 番目の要素を要素に持つ Vector2 を返す。
- join +Vector -JoinedVector
- Vector を末尾に連結した JoinedVector を返す。
string
- `"' (Char | EscapeSequence)* `"'
- 定数表記
- new +Init +ElemSize
- 整数 Init 個の `\0' 文字を要素に持つ string オブジェクトを作る。
または文字のリスト Init の要素を要素に持つ string オブジェクトを作る。
ElemSize は 8。
- string -Size -ElemSize
- 文字数 Size と ElemSize = 8 を返す。
- size -Size
- 文字数 Size を返す。
- element_size -ElemSize
- ElemSize = 8 を返す。
- element +Index -Element
- Index [0,*) 番目の要素 Element を返す。
- less_than, not_less_than +String
- 辞書順で String より前か否かを返す。
- set_element +Index +Element -NewString
- Index 番目の要素を Element に換えた NewString を返す。
- split +Index -String1 -String2
- [0,Index) 番目の要素を要素に持つ String1 と
[Index,*) 番目の要素を要素に持つ String2 を返す。
- join +String -JoinedString
- String を末尾に連結した JoinedString を返す。
- search_character +Start +End +Char -Index
- Start 番目から End 番目までの要素を走査し、
Char に等しい要素が見つかれば何番目か Index を返す。
見つからなければ Index = -1 を返す。
module
- new +NameAtom
- NameAtom によって指定された module オブジェクトを作る。
指定されたモジュールが未定義ならば NameAtom を返す。
- module
- モジュールか否かを判定する。
- name -NameAtom
- モジュール名 NameAtom を返す。
predicate
- `predicate#(' ModuleAtom `:' NameAtom `/' Arity `)'
- 定数表記
- new +Module +NameAtom +Arity
- 述語オブジェクト predicate#(Module:NameAtom/Arity) を作る。
- predicate
- 述語か否かを判定する。
- arity -Arity
- 述語の引数の個数 Arity を返す。
- apply +ArgVector
- 引数 ArgVector に述語を適用する。
- call ?Arg ..
- 述語を呼び出す。
- module -Module
- 述語を有する Module を返す。
- name -NameAtom
- 述語名 NameAtom を返す。
pointer
- new ?X
- pointer オブジェクトを作る。
termarray
- new ?Arg ..
- Arg .. を要素に持つ termarray を作る。
goal
- new +Predicate +ArgVector
- 引数 ArgVector に Predicate を適用するゴールを作る。
- reduce
- ゴールを実行待ち状態にする。
- step Children WokenUp Failure SuspensionReason
- ゴールをステップ実行待ち状態にする。
- arg +Pos ?Arg
- Pos [1,*] 番目の引数 Arg を返す。
- setarg +Pos ?Arg ?NewArg -NewGoal
- Pos 番目の引数 Arg を NewArg に換えた NewGoal を返す。
- id -ID
- ゴールの ID を返す。
- predicate -ModuleNameAtom -NameAtom -Arity -PredID
- 述語 predicate#(ModuleNameAtom:NameAtom/Arity) = PredID を返す。
- set_predicate +Predicate -NewGoal
- 述語を Predicate に換えた NewGoal を返す。
Usage in KLIC-C Language
klic/gdobject.h
- 副作用
- klic/{ basic, struct, primitives, unify, index, gb, bb,
g_basic, g_extern, g_extinl, g_methtab }.h が include される。
klic/gd_methtab.h
- 前提
- include する前にマクロ GDUSE_MY_* を必要に応じて定義しておくこと。
GDDEF_* して GDUSE_MY_* を定義した後、GDDEF_NEW の前に include する。
- 変数 struct data_object_method_table GD_method_table
- 関数 q GD_STD_GUNIFY(), 関数 q* GD_STD_UNIFY()
- 関数 long GD_STD_PRINT()
- 関数 q* GD_STD_GC()
- 関数 long GD_STD_REGIST()
- 関数 long GD_STD_DEALLOCATE()
- 関数 q* GD_STD_CLOSE()
- 関数 q GD_STD_GGENERIC(), 関数 q* GD_STD_GENERIC()
- 関数 q GD_STD_COMPARE(), GD_STD_HASH()
klic/gd_macro.h
- 宣言 GD_USE_CLASS(class)
- 宣言 GDDEF_NEW(), GDDEF_GUNIFY(), GDDEF_UNIFY(),
GDDEF_PRINT(), GDDEF_COMPARE(), GDDEF_HASH(), GDDEF_GC(),
GDDEF_REGIST(), GDDEF_DEALLOCATE(), GDDEF_CLOSE(),
GDDEF_GGENERIC(), GDDEF_GENERIC(),
GDDEF_GMETHOD(ga), GDDEF_METHOD(fa), GDDEF_METHOD_NO_ARITY(fn)
- q class:new (long GD_ARGC, q GD_ARGV[], q* g_allocp)
- 宣言 GD_STD_DECL_FOR_NEW
- GD_rappend(pref), GD_guard(fa), GD_body(fa), GD_body_no_arity(fa)
- 型 GD_method_table, GD_method_table0(class), GD_method_table1(class)
- `class'_g_data_method_table
- 定数 const char* GD_CLASS_NAME_STRING
- 定数 q GD_GCREQUEST
- 定数 long GD_GSUCCESS, GD_GFAILURE
- 関数 q eq_terms_body()
- 関数 (q*) GD_MAKE_GENERIC_GOAL(), G_MAKE_THE_NEW_GOAL()
- 関数 (q*) do_shallow_unify(), do_shallow_unify_value()
- 関数 q* G_SUSPEND()
- 関数 q GD_OBJ(long x)
- 関数 void GD_FAIL(const char* errmsg), GD_UNIFY_FAIL
- 関数 void GD_ERROR_IN_NEW, GD_ERROR_IN_UNIFY (const char* errmsg)
- 関数 void GD_ERROR_IN_METHOD
(const char* errmsg, const char* methodname)
- 関数 void GD_GRETURN(q x), GD_RETURN,
GD_GFAIL, GD_GUNIFY_FAIL, GD_GSUCCEED
- 関数 void GD_SUSPEND_NEW(q v), GD_RETURN_FROM_NEW(q v),
GD_RETURN_FROM_PRINT, GD_RETURN_FROM_GC(newgobj)
- 関数 void GD_ALLOC_AREA, GD_ALLOC_AREA_FOR_NEW (new, type, size)
- 関数 void GDSET_NEWOBJ(newgobj), GDSET_NEWOBJ_IN_NEWGEN(newgobj),
GDSET_NEWOBJ_FOR_NEW(newgobj, size)
- 関数 void GDset_myself_for_new
- 関数 void GDSET_INTARG, GDSET_INTARG_FOR_NEW (var, argv_i)
- 関数 void GDSET_SYMARG, GDSET_SYMARG_FOR_NEW (var, arg)
- 関数 void GDSET_GINTARG_WITHIN_RANGE(var, x, from, to),
GDSET_INTARG_WITHIN_RANGE(var, argv_i, llim, ulim)
- 関数 void GD_GDEREF, GD_DEREF, GD_DEREF_FOR_NEW (q& x)
- 関数 void GD_DEREF_AND_HOOK(obj, method_functor, argv)
- 関数 GD_GUNIFY, GD_UNIFY, GD_UNIFY_VALUE (x, y)
- 関数 GD_PUTC(x), GD_PRINT(x), GD_PRINTF(s, arg),
GD_PRINT_KL1_TERM(x), GD_PRINT_KL1_TERMS(x, b, s)
- 関数 GD_COPY_KL1_TERM_TO_NEWGEN(from, to)
- 関数 int GD_IS_CLASS(class, obj)
- 関数 q GD_CALL_GMETHOD, q* GD_CALL_METHOD (obj, method, argv)
- 関数 q GD_NEW(class, argc, argv)
- GD_SWITCH_ON_GMETHOD, GD_SWITCH_ON_METHOD,
GD_SWITCH_ON_ARITY, GD_SWITCH_ON_GMETHOD_NAME,
GD_GMETHOD_CASE(fa), GD_METHOD_CASE(fa),
GD_GMETHOD_CASE_DIRECT, GD_METHOD_CASE_DIRECT(fa),
GD_GMETHOD_CASE_DEFAULT, GD_METHOD_CASE_DEFAULT,
GD_METHOD_NAME_CASE(sym), GD_METHOD_NAME_CASE_DEFAULT
Making in KLIC-C Language
byte_string
klic/g_float.h
- 型 struct float_object
- import struct data_object_method_table
- 型 float_structure_type
- 不要。
- 初期設定子 struct float_object declare_float_constant(double value)
- 関数 q makefloat(q* x)
- import makefunctor
- 関数 struct float_object* float_value(q x)
- import functorp
klic/g_pointer.h
- 型 struct pointer_object
- import struct data_object_method_table
klic/g_string.h
- 型 struct byte_string_object
- import struct data_object_method_table
- 定数 const q STRING_SHALLOW_MARK
- import makeint
- 関数 int IS_SHALLOW_STRING(struct byte_string_object s)
- import STRING_SHALLOW_MARK
- 型 string_structure_type_8
- import struct byte_string_object
- 初期設定子 struct byte_string_object declare_string_constant_8
(unsigned char* body, unsigned length)
- import byte_string_g_data_method_table, STRING_SHALLOW_MARK
klic/g_termarray.h
- 型 struct termarray_object
- import struct data_object_method_table
klic/g_vector.h
- 型 struct vector_object
- import struct data_object_method_table
- 型 vector_structure_type
- 不要。
- 定数 const q VECTOR_SHALLOW_MARK
- import makeint
- 関数 int IS_SHALLOW_VECTOR(struct vector_object v)
- import VECTOR_SHALLOW_MARK
- 初期設定子 struct vector_object declare_vector_constant
(q* body, int length)
- import vector_g_data_method_table, VECTOR_SHALLOW_MARK
- 関数 q create_vector()
klic/gmodule.h
klic/goalobj.h
runtime/gcode.c
runtime/gfloat.c
runtime/ggoal.c
runtime/gmodule.c
runtime/gmvv.c
runtime/gpointer.c
runtime/gstring.c
runtime/gtermarray.c
runtime/farith.kl1
- module floating_arithmetics
- 述語 floating_point_* +X +Y -Z
- add, subtract, multiply, divide, power
- 述語 floating_point_* +X -Z
- sin, cos, tan, asin, acos, atan, sinh, cosh, tanh,
exp, log, sqrt, ceil, floor, to_integer
Copyright 2001, TAKAGI Yusuke.