とりあえず立てました.
参考になりそうなページ.てか課題のいくつかの答えがそのまんまありますが.
http://bach.istc.kobe-u.ac.jp/prolog/intro/
NanashISer, Tue Apr 5 23:53:58 2005LiLF*ckと陰口を叩かれるLiLFeSの演習,みなさんご愁傷^h^h^hお疲れさまです
.
私の浅い理解ではLiLFeSは「構造体付きProlog」と言ってしまってよいと思って
います.「素性構造」という怪しい単語も出てくるし,「型」という用語の使い
方もずいぶん異なるので,気を付けて下さい.まだしばらくそこまではいかない
かな?
Prologが基礎としているunificationは非常に重要な概念で,静的型付けの(Hin
dley-Milner型機構を備えた)関数型言語,特に間もなく始まるO'Camlの処理系
において型推論の実装に使われます.
みなさんはいずれMLのサブセットのコンパイラを書くことになるわけで,つまり
unificationを実装する必要があるということです.ファイト.
ところで論理型言語は実行の詳細が分からないので戸惑うという話を聞きました
.
一般に計算機工学/情報科学においては,健全な理解のためには抽象度が高いレ
イヤーと低いレイヤーを頻繁に行ったり来たりすることが必要です.高いレイヤ
ーにあっては低いレイヤーに落とすために生ずる制約を念頭に置き,低いレイヤ
ーにあっては高いレイヤーがうまく組み上げるように想定します.パタヘネのサ
ブタイトルは「ハードウェアとソフトウェアのインターフェイス」でしたね.こ
れはこの原則の一つの表現であり,大変深いことを表していると個人的に思って
います.
それはともかく,話に出たかもしれませんが,論理型言語処理系を実装するに当
たってほぼde factoとなっているVMとでも言うべきものがあります.それがWarr
en's Abstract Machineです.Warren先生が考案したもので,以後の論理型言語
処理系はいずれも概ねこれに基づいている... はずです(ぇ
「Warren Abstract Machine」でググると様々な資料が見つかりますが,トップ
に出てくる
http://www.vanx.org/archive/wam/wam.html Warren's Abstract Machine
から辿れる wambook.{pdf,ps} または wam-slides.{pdf,ps} (内容はほぼ一緒
)は確かにすばらしい情報源です.「言語L_3」のところまでがんばって読んで
下さい.Java辺りでGUIな実装をちょろっと書ける人もいるんじゃないかな?
論理型言語処理系がどのように動作しているのか,をたびたび思い起こしながら
学んでいけば,「できること」と「できないこと」の区別も容易につくようにな
るでしょう.(もちろんLiLFeS「ならでは」の内容にはあまり役立ちませんが)
論理型言語をSQLなどのデータベースのフロントエンドに使おうという「実用的
な」一派もあるそうです.まぁ論理型言語なんて「unificationアルゴリズムラ
イブラリ」として存在してくれれば十分な気もしますが(ぉ),それがあったと
しても使いこなすにはインタラクティブな体験が必須でしょう.食わず嫌いをせ
ず長いスパンで評価して,何とかやる気を捻出して下さい(ぉ
最後に:プログラミング言語のいろんなパラダイムを概観するには セシィ,プ
ログラミング言語の概念と構造,ピアソン が便利です.どこにでも転がってる
本ですから,流し読みしておくと吉.
(cons '名無し 'さん), Wed Apr 6 02:56:17 2005SQLはデータベースではないやね... 言いたいことを察して下さい(ぉ
(cons '名無し 'さん), Wed Apr 6 02:58:23 2005連言+変数が便利ぽ
いやLiLF.*自体は使いづらいんだが
アヒャ, Sat Apr 9 05:55:41 2005reverse(Xs, Ys)は
?- reverse(X, [1,2,3,4,5,6,7]).
のようなクエリーにも答えられるべきなんでしょうか。
なんか
X: < 7, 6, 5, 4, 3, 2, 1 >
Enter ';' for more choices, otherwise press ENTER --> ;
のあとnoが出てくれずに固まっちゃうんですが。
%% 以下ソース
reverse_sub <- [pred].
reverse_sub([], Zs, Zs).
reverse_sub([X|Xs], Ys, Zs) :- reverse_sub(Xs, [X|Ys], Zs).
reverse <- [pred].
reverse(Xs, Ys) :- reverse_sub(Xs, [], Ys).
132人目の素数さん, Sun Apr 10 21:09:44 2005内部で、「無理->1つリスト延ばす->無理->1つリスト延ばす...」となっている
んだと思います。
reverse(Xs, Ys) :-
reverse_sub(Xs, Xs, [], Ys, Ys, []).
reverse_sub(Xs, [], Ys, Ys, [], Xs).
reverse_sub(Xs,[X|X2s], X3s, Ys, [Y|Y2s], Y3s) :-
reverse_sub(Xs, X2s, [X|X3s], Ys, Y2s, [Y|Y3s]).
こうすると、XsがYsより長くなった時点で探索が終わるので、両方動くようにな
りました。
気持ち悪いですが。
既に送ったレポートのコピペなんで丸コピは勘弁。
小西, Mon Apr 11 00:23:48 2005cse端末からProlog演習のページにアクセスできない件について
NanashISer, Wed Apr 13 21:22:26 2005emacs強調表示ファイルの使い方
http://www-tsujii.is.s.u-tokyo.ac.jp/~yoshinag/prolog-enshu/
Y.Matsumoto, Mon Apr 25 21:44:58 2005知らない人がいるようなので一応.LiLFeSでのトレースの仕方.文法にクセがあ
るのでサンプルをよく見てください.
http://www-tsujii.is.s.u-tokyo.ac.jp/lilfes/manual/builtin-trace.ja.html
もっと課題関連の情報を共有しようぜ.
NanashISer, Sat May 14 03:06:23 2005あまり参考にならないが
http://bach.istc.kobe-u.ac.jp/prolog/intro/lang.html
ry, Sat May 14 11:02:33 2005lilでポインタから実体を得るにはどうすれば・・・
へるぷ!!
tokuda, Mon May 30 17:14:59 2005Pointer = [Nakami1|Nakami2]
みたいな。
132人目の素数さん, Tue May 31 17:18:07 2005thanks☆
tokuda, Wed Jun 1 00:11:19 2005どうでもいいが課題提出状況の一番下の彼は凄いな。
ry, Wed Jun 1 13:19:00 2005