DOBON.NET DOBON.NETプログラミング掲示板過去ログ

prologでリスト処理をするというのを勉強中なのですが

分類:[その他]

http://bach.istc.kobe-u.ac.jp/prolog/intro/list.html
リンク先でprologの初歩を勉強しております。

リンク先に
append([], Z, Z).
append([W|X1], Y, [W|Z1]) :-append(X1, Y, Z1).
last(L, X) :- append(_, [X], L).
memb(X, L) :- append(_, [X|_], L).

というコードがあり
append(X,Y,[a,b,c]).
がなぜ動くかは何となく理解出来たのですが。
last([a,b,c],X).や
memb([a,b,c],L).が何故上手く動くのかよくわからない状態です。
コードはどんなふうに実行されているのでしょうか?


私ネット上のマナーに疎く、たまにやらかしてしまうことがあるので、マナー違反だった場合ご指摘ください。
できるだけマナーは守ろうと考えてますのでご指摘があればうれしいです。
マナー違反があればご指摘ください。

勉強が進みました。
前回の質問まではあやふやな理解ながらもなんとか理解できた状態です。

http://bach.istc.kobe-u.ac.jp/prolog/intro/lang.html
今のところリンク先を参考に勉強してなんとか構文解析のところまで勉強を進めました。

vp(vp(V,NP,PP), S0, S) :-
v(V, S0, S1), np(NP, S1, S2), pp(PP, S2, S).
のvp(V,NP,PP)がどんな意味を持つのか。
V,NPなどはどんな単語で束縛されるのか。

n(n(time), [time|S], S).
の辞書はどう利用されるのか?

prologに詳しいかた解説宜しくお願いします。
■No31484に返信(堀江伸一さんの記事)

リンク先の内容

> s は文, np は名詞句, vp は動詞句, pp は前置詞句, n は名詞, v は動詞, adj は形容詞, det は冠詞, prep は前置詞を表します.
したがって上の規則はそれぞれ次のような文法規則に相当しています.

> 文 → 名詞句 動詞句
> 文 → 動詞句
> 名詞句 → 名詞
> 名詞句 → 形容詞 名詞
> 名詞句 → 冠詞 名詞
> 動詞句 → 動詞
> 動詞句 → 動詞 名詞句
> 動詞句 → 動詞 前置詞句
> 動詞句 → 動詞 名詞句 前置詞句
> 前置詞句 → 前置詞 名詞句

のままではないですか?
頭部に述語が使用されているときProlog処理系がどう動くのか?
そこを知りたいのですが?
まだPROLOGの勉強を始めて1週間目なのでそういう少し難しい記述が入るとよくわからない状態になります。

頭部の中に述語がある場合、頭部内の述語がさらにマッチするかPROLOG処理系が調べるということでよいでしょうか?

DOBON.NET | プログラミング道 | プログラミング掲示板