ボンジュール・マドモアゼル

本サイトの情報は自己責任にてご利用下さい。

[Prolog] Prolog メモ

 
Prolog: 空リスト [] は、atom である。
atom([]).
は 真.

\+ は、Prologの組み込み述語で、対象の述語を否定する。
例)\+father(terach,isaac).

lose(List1, List2) :-

next(List1, List2, X),
not(tick(List1, [X|List2], _)),
!.

http://d.hatena.ne.jp/koichik/20050816


Prolog君が、 List1 について
次にさせる手がないということ

これ凄いぞ。2ch PrologでまったりPart2 より
?- see('foo.pro'),repeat,read(X),(X=end_of_file;write_formatted('%t.n',[X]),fail),seen.
ファイルを最後まで読んでそのまま表示する簡単なもの。


24 :デフォルトの名無しさん[sage]:2010/11/10(水) 20:25:49
一応参考まで
http://www.google.com/codesearch
lang:prolog ^(is_?)?list([

25 :デフォルトの名無しさん[sage]:2010/11/10(水) 21:13:19
完全な定義は、
list(V) :- var(V),!,fail.
list([]).
list([H|T]) :- list(T).

[Prolog] No permission to modify static_procedure

 
SWI-Prolog にて

エラー事象1
述語 hanoi/5 対して、述語 assert/1 を適用すると、次のエラーが発生。

ERROR: asserta/1: No permission to modify static_procedure `hanoi/5'

対処
dynamic ディレクティブを用い、動的に追加/削除する述語を指定する。

例)
:- dynamic hanoi/5.
hanoi(1,A,B,C,[A to B]).
hanoi(N,A,B,C,Moves):-
        ...


エラー事象2
組込み述語length を再定義しようとした際、次のエラーが発生。

ERROR: (c:/file1.pl:2):
'$record_clause'/3: No permission to modify static_procedure `length/2'

対処
redefine_system_predicate ディレクティブで再定義の対象となる述語を指定する。

例)
:- redefine_system_predicate(length(_,_)).
length([], 0).
length([X|Xs], L) :- length(Xs, L1), L is L1 + 1.

[Prologの技芸] Prologの技芸 正誤表

 
Prologの技芸 初版3刷 の誤植,誤記につき。
原著(初版)の誤記かもしれない。
なお、Prologの技芸は、The Art of Prolog の初版を訳しているが、
以下、英語版として参照しているのは、The Art of Prolog 2nd.

65ページ
図3.5: リスト反転の証明木
reverse([a,b,c,d],[d,c,b,a])

|
reverse([a,b,c,d],[],[b,c,d,a d,c,b,a])
|
reverse([b,c,d],[a],[d,c,b,a])
|
reverse([c,d],[b,a],[d,c,b,a])
|
reverse([d],[c,b,a],[d,c,b,a])
|
reverse([],[d,c,b,a],[d,c,b,a])


90ページ
S が変数で、 T が S を含まない項である場合には、次のような処理が行われる。スタック中に現れる S をすべて捜し出し、それを T で置き換える。同様に θ 中のすべての S をT に置き換える。そして代入 S = T を θ に付け加える。

If S is a variable, and T is a term not containing S, the following happens. The stack is searched for all occurrences of S, which are replaced by T. Similarly, all occurrences of S in θ are replaced by T. Then the substitution S = T is added to θ.

105ページ
ハーブランド空間(Herbrand universe) → エルブラン領域
ハーブランド基底(Herbrand base) → エルブラン基底

185ページ
プログラム9.5a: 項に対応するリストの構築
Term =.. List:-

List は、Term の関数子と、その後ろに Term の引数を連ねたも
のからなるリストである。
Term =..[F|Args]):-
functor(Term,F,N), args(0,N,Term,Args).
args(I,N,Term,Arg,Args[Arg|Args]):-
I<N,I1:=I+1,arg(I1,Term,Arg),args(I1,N,Term,Args).
args(N,N,Term,[]).


219ページ
プログラム11.6 11.5の交換ソートについて考えてみよう。

372ページ
move(jugs(V1,V2),fill_and_transfer(1)).


update(jugs(V1,V2),fill_and_transfer(1),jugs(0,V)):-
capacity(1,C1),
capacity(2,C2),
C1 > C2,
V is (C1 + C2 V2) mod C2.

384ページ
プログラム18.10: ミニマックス・アルゴリズムによる最良な指手の選択
evaluate_and_choose([Move|Moves],Position,D,MaxMin,Record,Best) :-

move(Move,Position,Position1),
minimax(D,Position1,MaxMin,MoveX,Value),
update(Move,Value,Record,Record1),
evaluate_and_choose(Moves,Position,D,MaxMin,Record1,Best).
evaluate_and_choose([],Position,D,MaxMin,(Move,Value),Value (Move,Value)).


456ページ
銀行のデータ:担保の分類
     collateral(local_currency_deposits,first_class).

collateral(foreign_currency_deposits,first_class).
collateral(negotiate_instruments,second_class).
collateral(mortgage,unliquid illiquid).


おまけ(誤植ではないが)
444ページ
プログラム20.3:(続き)

extend_move(Stones,M,Board,[]) :-
Stones == ( 7-M ) mod 13, !.
extend_move(Stones,M,Board,Ms) :-
Stones =:= ( 7-M ) mod 13, !,
distribute_stones(Stones,M,Board,Board1),
move(Board1,Ms).



以下補足

1.4 存在限量質問
次に導入する演繹規則は、汎化(generalization)である。これは、存在限量質問 P? が任意の代入 θ について、その代入例 Pθ の論理的帰結であるという規則である。

An existential query P is a logical consequence of an instance of it, Pθ ,for any substitution θ.

もっと、簡潔に訳すと、
汎化とは、存在限量質問 P? は、任意の代入例 Pθ の論理的帰結であるという規則である。
言い換えれば、任意の代入例 Pθ から、存在限量質問 P? を帰結することを汎化という。

[ゲーム] ダーククロニクル ギフトカプセルの使い方

 
ダーククロニクルのギフトカプセルの使い方
ギフトカプセルを装備する前に、
  1. 所持アイテム一覧にてギフトカプセルにカーソルを合わせる。
  2. △ボタンを押す。
  3. 格納するアイテムの上にギフトカプセルを合わせて、○ボタンを押す。