13/10/27 06:57:07.73
東京キャビネットみたいな
高速で検索できるデータベースの中を
Prologの命題で検索できないのでしょうか
MySQLは,それっぽいのみつけたので
既にあるのかもしれないですが
706:デフォルトの名無しさん
13/10/27 09:25:23.92
Prologで文法のサイトはよく見るんだが
VSのプロジェクトのような作り方ってPrologできるのん?
707:デフォルトの名無しさん
13/12/17 10:57:32.78
swi-prologが標準みたいだけど
swi-prologが一番使われてる理由って何故ですか?
swi-prologじゃなくて2番手みたいな処理系ってないのですか?
708:デフォルトの名無しさん
13/12/17 11:59:17.93
>>707
SWIは開発が活発で
組み込みやライブラリ、
ドキュメントが一番充実してる
教育や研究目的には向いてると思う
機能重視ならSWI
速度重視ならYAPやGNU Prologなどもオススメ
709:デフォルトの名無しさん
13/12/18 12:46:39.18
>>707
>>708に、日本語が十分満足に使えることを条件に加えると、
機能の SWI-Prolog 速度の AZ-Prolog でよいと思う。
710:デフォルトの名無しさん
13/12/19 08:47:57.77
PrologをSQLに変換するコンパイラなんてのをみつけた
Prologの構文って全部SQLに変換できるのだろうか
711:デフォルトの名無しさん
13/12/20 17:55:44.14
prologは演繹データベースだから、prolog -> SQL は難しい
SQL -> prolog なら大学の演習レベルでもなんとかなると思う
712:デフォルトの名無しさん
13/12/20 18:58:22.89
>>711
そうですね。単位節データベースの参照の後に延々とルールが来て、
それでデータベースのフィールド参照のキーが漸く来るなんてことも
有りえます。そういう場合は、selectを参照する条件としてそれらを
型推論的な先読みをしたとしても、拾ってくるのはかなり難しいです。
713:デフォルトの名無しさん
14/02/24 00:48:00.61
RDFのデータベースを検索するSQLの親戚あるけど
あれならPrologと一対一で変換できそう
714:デフォルトの名無しさん
14/03/09 15:32:00.41
SWI-Prologを使っているんだけどユニファイ可能な節が1つ以上存在するかを判定する組み込み述語ってある?
今はfindallした結果のリストの長さが0以上かで判定してる…
715:デフォルトの名無しさん
14/03/09 16:10:50.90
>>714
存在するか否かを判定するだけなら、単に質問すればいいのでは?
なぜわざわざfindallする必要があるのだろうか....
716:デフォルトの名無しさん
14/03/09 18:25:03.73
いい女ぴー?
やらしてくれるぴー?
717:デフォルトの名無しさん
14/03/16 21:00:44.77 8VpQ5LoV
>>714
ユーザ定義述語であることが条件だが、findall/3とclause/2を使うのが普通だと思う。
ユニファイ可能な節が1つ以上存在するかを判定する(Head) :- findall(_,clause(Head,Body),[_|_]).
718:デフォルトの名無しさん
14/04/09 21:24:27.23 i/ZHdrIw
>>717
findall/3を使わないと少なくとも幾つあるかはわからない。
719:デフォルトの名無しさん
14/06/05 12:16:15.58 JLFuk7Df
generate(C) :-
random_between(65, 90, I),
atom_char(C, I).
experiment('STAP', Count) :- !,
writef('%w回目で陽性かくにん!¥nよかった☆¥n', [Count]).
experiment(_, Count) :-
generate(S),
generate(T),
generate(A),
generate(P),
atomic_list_concat([S, T, A, P], CELL),
writef('%w細胞', [CELL]),
NextCount is Count + 1,
experiment(CELL, NextCount).
main :-
experiment([], 0).
もっと面白い書き方ないかな?
720:デフォルトの名無しさん
14/06/05 19:08:53.35 h2Dia7Mk
% 特に改善されたという訳ではない。
generate(CELL) :-
findall(A,(
between(1,4,_),
N is random(26),
sub_atom('ABCDEFGHIJKLMNOPQRSTUVWXYZ',N,1,_,A)),
L),
atomic_list_concat(L,CELL).
main :-
nth1(Count,_,_),
generate(CELL),
writef('%w細胞', [CELL]),
CELL = 'STAP',
writef('%w回目で陽性かくにん!\nよかった☆\n', [Count]).
721:デフォルトの名無しさん
14/06/05 19:35:36.06 h2Dia7Mk
>>720
mainの最後に ! を入れて置かないと、バックトラックされるとCountが累計されていって、
いつかnth1/3が原因でスタックオーバーフローになるかも知れない。
722:デフォルトの名無しさん
14/06/05 23:17:35.42 awAmNJBx
STAP細胞でコードゴルフでもするかね
723:デフォルトの名無しさん
14/06/06 00:01:25.80 Ynv3Q/53
g(C):- findall(I,(between(0,3,_),random_between(65,90,I)),C).
e([83,84,65,80],N):-!, format('~w回目で陽性かくにん!¥nよかった☆¥n',[N]).
e(_, N):- g(C), format('~c~c~c~c細胞', C), N1 is N+1, e(C, N1).
main:-e([], 0).
$ wc stap.pl
3 16 233 stap.pl
$ swipl -q -t main -f stap.prolog
ドヤ!
724:デフォルトの名無しさん
14/06/06 00:03:45.32 Ynv3Q/53
g(C):-findall(I,(between(0,3,_),random_between(65,90,I)),C).
e([83,84,65,80],N):-!,format('~w回目で陽性かくにん!¥nよかった☆¥n',[N]).
e(_,N):-g(C),format('~c~c~c~c細胞',C),N1 is N+1,e(C,N1).
main:-e([],0).
$ wc -c stap.pl
223 stap.pl
$ swipl -q -t main -f stap.pl
スペースつめるの忘れてた
725:デフォルトの名無しさん
14/06/06 00:52:39.27 Ynv3Q/53
g(C):-findall(I,(between(0,3,_),random(65,91,I)),C).
e([83,84,65,80],N):-!,format('~w回目で陽性かくにん!¥nよかった☆¥n',N).
e(_,N):-g(C),format('~c~c~c~c細胞',C),O is N+1,e(C,O).
m:-e(0,0).
$ wc -c stap.pl
207 stap.pl
swipl -q -t m -f stap.pl
もうだめだ寝る