【論理】Prolog【初心者】at TECH
【論理】Prolog【初心者】 - 暇つぶし2ch705:デフォルトの名無しさん
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

もうだめだ寝る


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch