dcg

「dcg」の編集履歴(バックアップ)一覧はこちら

dcg」(2014/05/09 (金) 13:14:05) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

今までは単位節やホーン節(:- がある述語)などを使ってきましたが、 その他にdcgと言った便利な方法があります。 prologの設計者のAlain Colmerauer氏はこれを作りたくてprologを作ったと 誰かに聞いた覚えがあります。 weather --> a,b,c,d. a --> ['今日']. a --> ['昨日']. a --> ['明日']. b --> ['の天気は']. c --> ['晴れ']. c --> ['雨']. c --> ['曇']. d --> ['です']. test:-weather(A,[]),atom_appends(A,B),write(B),nl,fail. test:-!. テストしてみましょう。 ?-test. 今日の天気は晴れです 今日の天気は雨です 今日の天気は曇です 昨日の天気は晴れです 昨日の天気は雨です 昨日の天気は曇です 明日の天気は晴れです 明日の天気は雨です 明日の天気は曇です yes このように単語を属性ごとに分けて管理することができます。 ところで、どういった構成になっているのでしょうか? これはlistingを行えば、実はdcgはリストになっていることが分かります。 ?-listing. test :- weather(A,[]), atom_appends(A,B), write(B), nl, fail. test :- !. c([晴れ|_0],_0). c([雨|_0],_0). c([曇|_0],_0). a([今日|_0],_0). a([昨日|_0],_0). a([明日|_0],_0). b([の天気は|_0],_0). d([です|_0],_0). weather(_0,_1) :- a(_0,_2), b(_2,_3), c(_3,_4), d(_4,_1). weatherの第2アリティが空リスト担っているのは、_0を[]にしたい為です。 こうすれ第1アリティに[a,b,c,d]といったリストがユニフィケーションされるので、 最後にatom_appendsすればアトム型の文字列を得ることができます。
今までは単位節やホーン節(:- がある述語)などを使ってきましたが、 その他にdcgと言った便利な方法があります。 prologの設計者のAlain Colmerauer氏はこれを作りたくてprologを作ったと 誰かに聞いた覚えがあります。 weather --> a,b,c,d. a --> ['今日']. a --> ['昨日']. a --> ['明日']. b --> ['の天気は']. c --> ['晴れ']. c --> ['雨']. c --> ['曇']. d --> ['です']. test:-weather(A,[]),atom_appends(A,B),write(B),nl,fail. test:-!. テストしてみましょう。 ?-test. 今日の天気は晴れです 今日の天気は雨です 今日の天気は曇です 昨日の天気は晴れです 昨日の天気は雨です 昨日の天気は曇です 明日の天気は晴れです 明日の天気は雨です 明日の天気は曇です yes このように単語を属性ごとに分けて管理することができます。 ところで、どういった構成になっているのでしょうか? これはlistingを行えば、実はdcgはリストになっていることが分かります。 ?-listing. test :- weather(A,[]), atom_appends(A,B), write(B), nl, fail. test :- !. c([晴れ|_0],_0). c([雨|_0],_0). c([曇|_0],_0). a([今日|_0],_0). a([昨日|_0],_0). a([明日|_0],_0). b([の天気は|_0],_0). d([です|_0],_0). weather(_0,_1) :- a(_0,_2), b(_2,_3), c(_3,_4), d(_4,_1). weatherの第2アリティが空リスト担っているのは、_0を[]にしたい為です。 こうすれ第1アリティに[a,b,c,d]といったリストがユニフィケーションされるので、 最後にatom_appendsすればアトム型の文字列を得ることができます。 こうやった使い方もできます。 test:-weather(['今日','の天気は','晴れ','です'],[]). ?-test. yes

表示オプション

横に並べて表示:
変化行の前後のみ表示: