過去スレ
Prologでまったり Part4
http://pc12.2ch.net/test/read.cgi/tech/1235561034/
Prologでまったり Part3
http://pc11.2ch.net/test/read.cgi/tech/1193354806/
PrologでまったりPart 2
http://pc11.2ch.net/test/read.cgi/tech/1102664221/
Prolog でまったり
http://pc5.2ch.net/test/read.cgi/tech/976462999/
探検
Prologでまったり Part5 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/03/24(金) 14:51:42.44ID:ZNjVJLCP
2017/03/24(金) 20:35:29.83ID:qYto0KqJ
すみません。最後のPartなしは、リンクが切れていました。
一番肝心のスレッドなのに残念ですね。
一番肝心のスレッドなのに残念ですね。
2017/03/24(金) 20:39:51.26ID:qYto0KqJ
人工知能がブームになりつつあり、Prologにとっては追い風と書いたところ、
ジャンプするには向かい風の方がよい
との答えをもらいました。
ジャンプするには向かい風の方がよい
との答えをもらいました。
2017/03/25(土) 00:52:32.52ID:qwoL3pH1
2017/03/26(日) 18:33:47.40ID:AnJi4Uz+
Prologに型概念はないと言い切ってよいものだろうか。
6デフォルトの名無しさん
2017/03/30(木) 17:20:53.83ID:WsRWxyVT ふと、新聞に載ってる論理パズルを解くプログラムを書きたくなって
Debian に GNU Prolog をインストールして二十数年ぶりに Prolog を楽しんでるのだが、
まだ maplist が実装されていないバージョンだということに今気付いた。
2007 年にリリースされた 1.3.0 らしい。いや、特に困るわけでもないが。
fd_domain や fd_all_different は実装されてるからね。特に不足は無いよ。
不足があるなら自分で新しいのを入れればいいし。まあ、まったりいこう。
Debian に GNU Prolog をインストールして二十数年ぶりに Prolog を楽しんでるのだが、
まだ maplist が実装されていないバージョンだということに今気付いた。
2007 年にリリースされた 1.3.0 らしい。いや、特に困るわけでもないが。
fd_domain や fd_all_different は実装されてるからね。特に不足は無いよ。
不足があるなら自分で新しいのを入れればいいし。まあ、まったりいこう。
2017/03/31(金) 08:17:08.38ID:9hE01YVS
>>888
その部分では関数型言語も手続型言語もオブジェクト指向が強調されたものでも記述はできるが、その記述の関係さ
その部分では関数型言語も手続型言語もオブジェクト指向が強調されたものでも記述はできるが、その記述の関係さ
87
2017/03/31(金) 08:22:24.23ID:9hE01YVS すみません。論理Polog初心者スレと間違えて書き込んでしまいました
9デフォルトの名無しさん
2017/03/31(金) 19:43:34.32ID:YFIAsqYo >>5
型はないです。型という概念が使われることもない。外からどう見えようとも。
型はないです。型という概念が使われることもない。外からどう見えようとも。
2017/04/01(土) 12:04:38.01ID:gl56yuNT
>>9
本当は integer や float も atom という認識でよかったのではないか
本当は integer や float も atom という認識でよかったのではないか
11デフォルトの名無しさん
2017/04/02(日) 16:59:28.60ID:yhAnz0vw 人工知能といっても今流行ってるDeepLearningの世界にPrologの出番なんて無いと思うんだけどどう関係すんの?
2017/04/02(日) 18:34:31.57ID:jRfAXiJp
>>11
DeepLearningを含む機械学習やニューラルネットワークによる認識は
人工知能のごく一部。知識プログラミングにこれがつながるのはそれこそ
進化論的に大変。人間の思考、判断、意志、統制は、シンボル操作がやはり
中心になる。この領域の中心付近に述語論理があり、そういう意味で、
Prologはこの人工知能の世界では今後もずっとに安泰の地位にいる。
DeepLearningを含む機械学習やニューラルネットワークによる認識は
人工知能のごく一部。知識プログラミングにこれがつながるのはそれこそ
進化論的に大変。人間の思考、判断、意志、統制は、シンボル操作がやはり
中心になる。この領域の中心付近に述語論理があり、そういう意味で、
Prologはこの人工知能の世界では今後もずっとに安泰の地位にいる。
2017/04/02(日) 18:36:10.74ID:jRfAXiJp
ずっと安泰の地位にいる。 ですね。
14デフォルトの名無しさん
2017/04/02(日) 21:09:04.44ID:yhAnz0vw2017/04/02(日) 21:27:14.79ID:KLExlLIQ
>>12
Prologは記号処理に還元できる問題は得意だから今後も使われるだろう。
でも人間の曖昧な思考やそれに基づく自然言語は記号処理に還元できない。
そして自然言語処理でDeepLearningが次々と成果を出している。
FacebookのMemory Networksは述語論理抜きで質問に答える。
Prologはもう人工知能研究の中心ではないし今後もならないのでは?
ニューラル機械翻訳と記号幻想の死
http://rekken.g.hatena.ne.jp/murawaki/20161017/p1
Facebookの人工知能アルゴリズム「memory networks」について調べてみた
https://www.slideshare.net/metaps_JP/facebookmemory-networks-keo
NIP2015読み会「End-To-End Memory Networks」
http://www.slideshare.net/unnonouno/nip2015endtoend-memory-networks
>複数の文からなる事実から、質問に答えるタスクを、end-to-endで学習する手法を提案した
>単語の埋め込み、文のエンコード、各事実に対するattention、
>回答の生成までを単一のネットワークにする
Prologは記号処理に還元できる問題は得意だから今後も使われるだろう。
でも人間の曖昧な思考やそれに基づく自然言語は記号処理に還元できない。
そして自然言語処理でDeepLearningが次々と成果を出している。
FacebookのMemory Networksは述語論理抜きで質問に答える。
Prologはもう人工知能研究の中心ではないし今後もならないのでは?
ニューラル機械翻訳と記号幻想の死
http://rekken.g.hatena.ne.jp/murawaki/20161017/p1
Facebookの人工知能アルゴリズム「memory networks」について調べてみた
https://www.slideshare.net/metaps_JP/facebookmemory-networks-keo
NIP2015読み会「End-To-End Memory Networks」
http://www.slideshare.net/unnonouno/nip2015endtoend-memory-networks
>複数の文からなる事実から、質問に答えるタスクを、end-to-endで学習する手法を提案した
>単語の埋め込み、文のエンコード、各事実に対するattention、
>回答の生成までを単一のネットワークにする
2017/04/02(日) 22:09:22.59ID:jRfAXiJp
2017/04/02(日) 23:31:47.53ID:KLExlLIQ
>>16
数学の命題のように100%正しい命題なら記号処理に還元できる。
でも風が吹けば桶屋が儲かるのような確率的命題を扱うには
離散値ではなく連続値で推論する仕組みが要る。
ベイジアンネットワークやニューラルネットワークなら確率的命題を扱える。
数学の命題のように100%正しい命題なら記号処理に還元できる。
でも風が吹けば桶屋が儲かるのような確率的命題を扱うには
離散値ではなく連続値で推論する仕組みが要る。
ベイジアンネットワークやニューラルネットワークなら確率的命題を扱える。
2017/04/03(月) 20:35:32.05ID:r1rinKhd
swi-prologをEmacsで書く環境つくってるんだけど
run-prologで質問にセミコロンで答えてもリターンキーおすまで反応なくて
リターンおすとそこで終りになってしまうんだけどいい対策ないですか?
ターミナルならちゃんと次の答えの候補までだしてくれるんだけど
run-prologで質問にセミコロンで答えてもリターンキーおすまで反応なくて
リターンおすとそこで終りになってしまうんだけどいい対策ないですか?
ターミナルならちゃんと次の答えの候補までだしてくれるんだけど
19デフォルトの名無しさん
2017/04/04(火) 07:19:25.90ID:KH/GhSFx ありがとう。そういうことが起こるということには気付いてたけど
shell-mode を使ってるからだということがやっと分かった。
shell-mode では ; を単独で送れるようなキーバインディンディングにはなっていない。
しかし、run-prolog にも同じ問題があるとしたらいささか奇妙なことだと思うのだけど。
とりあえず、; にちゃんと応えてほしいなら ansi-term を使えばいいかも。
もちろん run-prolog を使いたいだろうとは思うけど。
; は諦めて失敗駆動ループで全部出力するという手もあるよ。
shell-mode を使ってるからだということがやっと分かった。
shell-mode では ; を単独で送れるようなキーバインディンディングにはなっていない。
しかし、run-prolog にも同じ問題があるとしたらいささか奇妙なことだと思うのだけど。
とりあえず、; にちゃんと応えてほしいなら ansi-term を使えばいいかも。
もちろん run-prolog を使いたいだろうとは思うけど。
; は諦めて失敗駆動ループで全部出力するという手もあるよ。
20デフォルトの名無しさん
2017/04/04(火) 09:02:08.12ID:KH/GhSFx 解ったぞ! ; の後に M-x (comint-send-input t) だ!
やってみた!
| ?- member(X,[a,b,c,d]).
member(X,[a,b,c,d]).
X = a ? ;;
X = b ?
Action (; for next solution, a for all solutions, RET to stop) ? ;;
X = c ?
Action (; for next solution, a for all solutions, RET to stop) ? ;;
X = d ?
Action (; for next solution, a for all solutions, RET to stop) ? ;;
(4 ms) no
| ?-
どうだ、うまくいったぞ! ……って、やってられっかー!
やっぱり run-prolog の方で対処してくれないと。
やってみた!
| ?- member(X,[a,b,c,d]).
member(X,[a,b,c,d]).
X = a ? ;;
X = b ?
Action (; for next solution, a for all solutions, RET to stop) ? ;;
X = c ?
Action (; for next solution, a for all solutions, RET to stop) ? ;;
X = d ?
Action (; for next solution, a for all solutions, RET to stop) ? ;;
(4 ms) no
| ?-
どうだ、うまくいったぞ! ……って、やってられっかー!
やっぱり run-prolog の方で対処してくれないと。
21デフォルトの名無しさん
2017/04/04(火) 09:07:01.03ID:KH/GhSFx ごめん、M-x じゃなくて M-: だった。
22デフォルトの名無しさん
2017/04/04(火) 17:59:32.06ID:KH/GhSFx 単に Prolog インタプリタを対話的に使いたいだけなら Emacs の外でやる方が快適なんだけど
それでは不便だからやっぱり Emacs の shell でやりたい。だからこんなことをしてみた。
(defun comint-send-input-without-nl ()
(interactive)
(comint-send-input t)
)
これを C-c C-j にバインドして使う。どうやら期待通りに動いているようだ。
まあ、; はよく使うからこんなのを使ってもいいかな。
(defun prolog-other-answer ()
(interactive)
(insert ";")
(comint-send-input t)
)
こっちは C-; にしてみた。
それでは不便だからやっぱり Emacs の shell でやりたい。だからこんなことをしてみた。
(defun comint-send-input-without-nl ()
(interactive)
(comint-send-input t)
)
これを C-c C-j にバインドして使う。どうやら期待通りに動いているようだ。
まあ、; はよく使うからこんなのを使ってもいいかな。
(defun prolog-other-answer ()
(interactive)
(insert ";")
(comint-send-input t)
)
こっちは C-; にしてみた。
2017/04/04(火) 19:43:46.75ID:GDXtDLgc
よくわからないけどM-;で%が入力されて
全部の回答がでてきた
全部の回答がでてきた
2017/04/09(日) 17:58:20.20ID:oNfwzwgh
2017/04/09(日) 20:02:28.24ID:kB0+YiBD
データ型という意味なら項(term)が該当するのだろうけど
C/C++の型の意味だとPrologは型無し言語にあたるかと・・
C/C++の型の意味だとPrologは型無し言語にあたるかと・・
26デフォルトの名無しさん
2017/04/10(月) 07:47:09.66ID:LBDhdaKW27デフォルトの名無しさん
2017/04/10(月) 09:56:04.56ID:EdjYscd82017/04/10(月) 10:02:02.44ID:b+5ml5KP
>>27
その理解で正しいのでは
その理解で正しいのでは
2017/04/10(月) 10:16:46.41ID:LBDhdaKW
Prologの変数では、setof/3やfindall/3の中の変数ですね。
外側の変数を受け継いだ場合です。
?- length(L,2),setof(A,A ^ member(A,L),X),L = [1,2].
L = X, X = [1, 2].
?- length(L,2),findall(A,member(A,L),X),L = [1,2].
L = [1, 2],
X = [_G711, _G708].
?- setof/3は受け継いていますが、findallでは切れています。
外側の変数を受け継いだ場合です。
?- length(L,2),setof(A,A ^ member(A,L),X),L = [1,2].
L = X, X = [1, 2].
?- length(L,2),findall(A,member(A,L),X),L = [1,2].
L = [1, 2],
X = [_G711, _G708].
?- setof/3は受け継いていますが、findallでは切れています。
2017/04/10(月) 10:18:53.87ID:LBDhdaKW
自由変数なんていう概念が通用することが分かります。
31デフォルトの名無しさん
2017/04/10(月) 12:53:10.94ID:dVOREBP7 >>18
問題は解決した? 原因が判ったよ。
; には prolog-inferior-self-insert-command というコマンドが割り当てられていて、
これが期待される動作だと思うんだけど、新しいバージョンではなぜか
この prolog-inferior-self-insert-command が無くなっている。
Emacs 24.4 に含まれている 1.22 にはまだあるけど 1.25 には無い。
理由は判らない。少なくとも prolog.el の Changelog にはそれらしい記述が無い。
とりあえず、prolog-inferior-self-insert-command があるバージョンを
使えばいいと思うよ。
問題は解決した? 原因が判ったよ。
; には prolog-inferior-self-insert-command というコマンドが割り当てられていて、
これが期待される動作だと思うんだけど、新しいバージョンではなぜか
この prolog-inferior-self-insert-command が無くなっている。
Emacs 24.4 に含まれている 1.22 にはまだあるけど 1.25 には無い。
理由は判らない。少なくとも prolog.el の Changelog にはそれらしい記述が無い。
とりあえず、prolog-inferior-self-insert-command があるバージョンを
使えばいいと思うよ。
2017/04/13(木) 17:36:21.71ID:C4pVfI8/
>>29
どれが自由変数なんですか
どれが自由変数なんですか
33デフォルトの名無しさん
2017/04/13(木) 18:49:38.84ID:zFvhZDnr >>32
findall/3の方のAです
findall/3の方のAです
2017/04/14(金) 18:45:04.44ID:Xi9X67bT
ファイルから行ならびを得る(_ファイル,_行ならび) :-
open(_ファイル,read,_入力),
findall(_項,(
repeat,(at_end_of_stream(_入力),close(_入力),!,fail;
行入力(_入力,_行))),_行ならび).
行入力(_入力,_行) :-
read_line_to_codes(_入力,_文字コードならび),
atom_codes(_行,_文字コードならび).
open(_ファイル,read,_入力),
findall(_項,(
repeat,(at_end_of_stream(_入力),close(_入力),!,fail;
行入力(_入力,_行))),_行ならび).
行入力(_入力,_行) :-
read_line_to_codes(_入力,_文字コードならび),
atom_codes(_行,_文字コードならび).
35デフォルトの名無しさん
2017/05/03(水) 22:12:53.29ID:jbhMxViH The Art of Prolog が PDF で公開されてるのはいいんだけど、テキストデータは無いのかな……
tesseract-ocr でテキスト化してるけど結構大変だ。
tesseract-ocr でテキスト化してるけど結構大変だ。
36デフォルトの名無しさん
2017/06/13(火) 23:42:07.13ID:3xaVR795 メモリ128GBの環境で述語 foo/1 引数にユニークなアトムを生成して5億節を定義する。
?- between(1,500000000,N),
atom_number(A,N),
assertz(foo(A)),
N = 500000000.
これで110GBを費やした。一節の追加あたり実に220byteということになり、
想像以上に大きくなった。
?- between(1,500000000,N),
atom_number(A,N),
assertz(foo(A)),
N = 500000000.
これで110GBを費やした。一節の追加あたり実に220byteということになり、
想像以上に大きくなった。
3736
2017/06/13(火) 23:46:21.36ID:3xaVR795 処理系は SWI-Prologインタプリタ (64bit版)
アトムテーブルがハッシュで管理されているとして、こんなにメモリを消費
するものだろうか。
アトムテーブルがハッシュで管理されているとして、こんなにメモリを消費
するものだろうか。
38デフォルトの名無しさん
2017/06/14(水) 20:28:21.72ID:/Jq2k2dd SWI-Prologインタプリタ
一方、atomの生成をやめて、グローバルスタックにリストして整数を積む。
?- findall(N,between(1,500000000,N),L).
これだと1リスト要素ごとに24バイト消費する。
一方、atomの生成をやめて、グローバルスタックにリストして整数を積む。
?- findall(N,between(1,500000000,N),L).
これだと1リスト要素ごとに24バイト消費する。
39デフォルトの名無しさん
2017/06/15(木) 06:08:36.12ID:OS4b1hKm Microsolft Azure の一時間あたりの料金
G5: 32 コア, 448 GB RAM,6144GB ディスク, \1,044.276/時間
消費税込みで月間81万円くらい。
G5: 32 コア, 448 GB RAM,6144GB ディスク, \1,044.276/時間
消費税込みで月間81万円くらい。
2017/06/15(木) 06:12:07.38ID:OS4b1hKm
448GBメモリを使うことができれば、
Prologのオンメモリデータベースで大企業でもかなりの部分がカバーできる。
ディスクストレージへのバックアップ時間など、課題もあるだろうが。
Prologのオンメモリデータベースで大企業でもかなりの部分がカバーできる。
ディスクストレージへのバックアップ時間など、課題もあるだろうが。
2017/06/15(木) 06:22:15.34ID:OS4b1hKm
% swipl -G445000M
?- findall(N,between(1,18000000000,N),L).
が可能だということ。
?- findall(N,between(1,18000000000,N),L).
が可能だということ。
42デフォルトの名無しさん
2017/06/15(木) 06:41:01.44ID:SczZ9hH443デフォルトの名無しさん
2017/06/16(金) 06:18:01.36ID:Qm+kDu/O >>36
% GNU Prolog 1.4.4 でやってみたよ。コードはこんなんでいい?
ps :- shell('ps p $PPID -O sz',_).
eat_memory( Start,End) :-
\+(( between( Start,End,N), number_atom( N,A), assertz( foo( A)), fail)).
main :-
os_version( OS), write( OS), nl,
ps,
eat_memory( 1,10000),
ps,
eat_memory( 10001,20000),
ps,
true.
% GNU Prolog 1.4.4 でやってみたよ。コードはこんなんでいい?
ps :- shell('ps p $PPID -O sz',_).
eat_memory( Start,End) :-
\+(( between( Start,End,N), number_atom( N,A), assertz( foo( A)), fail)).
main :-
os_version( OS), write( OS), nl,
ps,
eat_memory( 1,10000),
ps,
eat_memory( 10001,20000),
ps,
true.
44デフォルトの名無しさん
2017/06/16(金) 06:19:09.35ID:Qm+kDu/O % 実行結果
| ?- main.
main.
Linux 3.16.0-4-amd64
PID SZ S TTY TIME COMMAND
2993 32177 S pts/3 00:00:00 /home/i/Downloads/gprolog-1.4.4/bin/gprolog
PID SZ S TTY TIME COMMAND
2993 32807 S pts/3 00:00:00 /home/i/Downloads/gprolog-1.4.4/bin/gprolog
PID SZ S TTY TIME COMMAND
2993 33466 S pts/3 00:00:01 /home/i/Downloads/gprolog-1.4.4/bin/gprolog
(1728 ms) yes
| ?-
% 65 くらいだね。SWI の実装は知らないが 3.5 倍くらいなら驚くほどではないと思う。
| ?- main.
main.
Linux 3.16.0-4-amd64
PID SZ S TTY TIME COMMAND
2993 32177 S pts/3 00:00:00 /home/i/Downloads/gprolog-1.4.4/bin/gprolog
PID SZ S TTY TIME COMMAND
2993 32807 S pts/3 00:00:00 /home/i/Downloads/gprolog-1.4.4/bin/gprolog
PID SZ S TTY TIME COMMAND
2993 33466 S pts/3 00:00:01 /home/i/Downloads/gprolog-1.4.4/bin/gprolog
(1728 ms) yes
| ?-
% 65 くらいだね。SWI の実装は知らないが 3.5 倍くらいなら驚くほどではないと思う。
2017/06/16(金) 07:24:41.91ID:3eXmF8sI
46デフォルトの名無しさん
2017/06/16(金) 16:54:43.29ID:TakoXWt847デフォルトの名無しさん
2017/06/21(水) 20:47:56.02ID:v8ZlsGJ1 それにしても一億節になると一節の追加時間が二万分の一秒と極端に遅い。
ハッシュの重なりが1万通りくらい出てきて平均5000回リンクを辿ると
いうことか。
ハッシュの重なりが1万通りくらい出てきて平均5000回リンクを辿ると
いうことか。
48デフォルトの名無しさん
2017/06/26(月) 14:25:30.75ID:1MBq+06J Prologもインメモリデータベースとしてさらに進化するべき時期。
http://www.publickey1.jp/blog/17/intel_persistent_memory2018xeoncascade_lake.html
http://www.publickey1.jp/blog/17/intel_persistent_memory2018xeoncascade_lake.html
2017/06/26(月) 19:19:28.13ID:J+dCdevE
そこはHPEのThe Machineじゃないの?
2017/06/26(月) 20:39:09.17ID:1MBq+06J
51デフォルトの名無しさん
2017/07/01(土) 13:39:49.52ID:yvgbUlYU 制約論理プログラミングってのでPrologの色んな弱点緩和されてるっぽい。
SWI-Prologにもclpfdなるライブラリで提供されてるらしいけど使ってる?
SWI-Prologにもclpfdなるライブラリで提供されてるらしいけど使ってる?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国の渡航自粛要請1カ月 大阪の観光バス予約ゼロ、東北にも波及 [蚤の市★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★12 [蚤の市★]
- 【神戸】エレベーター「かご」なく男性医師が転落死 大手「三菱電機ビルソリューションズ」の担当者、安全装置切り放置か [ぐれ★]
- 女性天皇「賛成」69%、将来の皇位継承「不安」68%…読売世論調査 [蚤の市★]
- 不倫疑惑の永野芽郁さん、CM削除ドミノの違約金“やはり発生は免れない”可能性 約10億円になる見込み、本人は全額支払う覚悟 [牛丼★]
- 【群馬】横断歩道を渡っていたNHKアナウンサーが車にはねられ骨折などの重傷 前橋市 [ぐれ★]
- ガチニートのモーニングがお洒落すぎる件
- 趣味に年50万って多い?
- 【悲報】ドイツ人「なんで日本人って自炊するの?出来合の惣菜や冷食食った方が楽でコスパいいやん。そんなんだから低生産性なんだよ [786648259]
- 底辺テイカー気質Vtuberを破壊する遊びが闇深いと話題に [922647923]
- 【動画】まんさん、アラジンのジーニーみたいな男にボコボコにされる🧞‍♂ [632966346]
- 【時事】立憲民主党、30代の支持率が「ゼロ」😨 [369521721]
