- ...プラグマはプログラムの正当性
- 正確には停止性を除いた部分正当性.
- ...プログラムはつつがなく終了することになる.
- 後に述べるが, プロ
グラムの実行はつつがなく終了するとは限らない.
- ...あるとわかった節をひとつだけ選び,
- 複数あれば, どれが選ばれる
かはわからない.
- ...書き換えるべきゴールの集合
- 同じものがあってもよいので, 正確に
はマルチ集合.
- ...換えられると実行は終了する.
- KL1 ではいつまで待っても実行が終
らないが有用なプログラムというものも考えられる.
- ...処理系の都合で決めて良いことになっている.
- 通常は実行は
左から右に行なわれるが, 必ずそうなるとは限らない. また, 実行順序を指
定するために後述の優先度指定機構もあるが, やはり絶対的なものではない.
- ...選ぶかあえて決めていない.
- 節間の優先度を与える機構もあるが,
これは絶対的なものではない.
- ...ている.
- 実際, 非共有メモリのマルチプロセサシステム上の処理系
では, 近くにデータが揃っていてプロセサ間通信をしなくてもガードの真偽を
判定できるような節があれば, そちらを選ぶように実現することがあるので,
毎回どの節を選ぶかが変わったりする.
- ...語に近い.
- ここでいう意味では, 広く使われている Lisp は関数型
ではなく, 手続き型言語である.
- ...同じホーン論理
- 機械的な定理証明が比
較的容易で, 表現力もかなり大きい一階述語論理のサブセット. Prolog (カッ
トなどを含まないピュアなもの) も KL1 も, この論理についての不完全だが
健全な自動証明系とみなせる.
- ...完全度をできるだけ上げるように設計されている.
- しかし, 本当に
完全ではない.
- ...適化しにくいことは欠点のひとつである.
- この欠点はコンパイル時
の解析によって型を推論すれば, ある程度はカバーできる.
- ...結果を値にしたい変数を左辺に書く.
- この他にビットごとの論理和, 論理積, 論理排他和, 反転などもあ
るが, ここでは詳しく述べない.
- ...ある.
- KLIC ではここに述べる構造データは基本的なデータ型として
用意されている. それ以外の構造データは generic object と呼ばれる拡張
機能を用いて実現される.
- ...成データ構造
- 不完全データ構造と呼ぶ場合もある.
- ...プロセスと呼ぶ.
- KL1 ではプロセスという概念は言語仕様の一部ではなく, あるプログラミン
グ・スタイルにつけた名前に過ぎないことに注意されたい.
- ...足し算は後からやっても構わないのである.
- 並列に行なって良いということは必ずしも実際に並列に行なえば速
くなるということではない. 通信のためのコストなどがあるので, 普通は足
し算のような簡単な操作を並列に行なうメリットはない. 実際の KL1 の処理
系ではこのような足し算を並列に行なおうとしたりはしない. この例は整数
の足し算という簡単な操作だったのだが, 足し算の代わりにもっと複雑な操作
を各要素について行なう必要があれば, 実際に並列に行なうメリットがでてく
る.
- ...ある数未満の自然数
- ここでは 0 も自然数だとしている.
- ...れだけ並列度が低くなってしまうわけである.
- 繰り返しになるが,
プログラムに並列性があるということと, その並列性を実際の並列実行として
実現するかどうかは別の問題である. 実際に並列に実行するか逐次に実行す
るかは通信コストなどの要因を考えて決めるべきである.
- ...という.
- この例の場合は合計を求めるのが目的なので, データの到着順は問題ではな
いのだが, 一般には順序が問題になることが多い.
- ...これを使うことを考える.
- もちろんこの例のような
簡単な問題なら全部書き直してしまった方が早いぐらいである. ここに説明
するような方法は, 本当は必要な計算がもっと複雑で, square のような述語
を書き直す手間が大きい場合にこそ有効である.
- ...それをそのまま出力することを意味する.
- 引数を
ストリームとしてではなく, 単なるリストとして解釈すれば, この述語はふた
つのリストをつなぎ合わせたようなリストを作る, という述語になっている.
- ...る非決定性が現れている例である.
- もちろん前節の append のよう
な非決定性のない書き方をすることもできる.
- ...とも呼ぶ.
- 自動定理証明では, 逆に公理から始めて証明できる命題
を生成して行く, ボトムアップの方法もある. エキスパート・システムなど
で良く使われる前向き推論 (forward reasoning) というのも同じである.
- ...このプログラムを要求駆動的
- 現在のところ KL1 には要求
駆動を明示する枠組はないので, あくまで記述されたプログラムの意味として
解釈されたい.
- ...実行時の効率も悪くなる
- 一つのメッセージがマージャ木構造を通り
抜けるのには, 最悪, その木の深さに比例する時間と計算量がかかる
- ...ノード間のアークを双方向ストリーム
- 実際には向きが逆の2本の単方向ストリームとして実現する
- ...可能性がある
- 生産者を優先的に実行すれば, 消費者がデータを
消費するたびに起こるサスペンドの回数を減らすことができるのも
事実である. 実際には注意が必要である.
- ...の順に実行されるであろう
- 現在の逐次版 KLIC 処理系はこのスケジューリングを採用している
- ...最も効率良いものと言える
- この例は各述語の引数がないので効率的とも言える.
- ...可能性がある
- 実行時オプション
-H30k は, 最大ヒープサイズ
を 30k word として実行することを意味する.
- ...単純なカウンタゴール
- 再帰呼び出しを使ってループした回数を
カウントするゴール
KLIC