Prologでまったり Part5 [無断転載禁止]©2ch.net

0001デフォルトの名無しさん2017/03/24(金) 14:51:42.44 ID:ZNjVJLCP

0002デフォルトの名無しさん2017/03/24(金) 20:35:29.83 ID:qYto0KqJ
すみません。最後のPartなしは、リンクが切れていました。
一番肝心のスレッドなのに残念ですね。

0003デフォルトの名無しさん2017/03/24(金) 20:39:51.26 ID:qYto0KqJ
人工知能がブームになりつつあり、Prologにとっては追い風と書いたところ、

ジャンプするには向かい風の方がよい

との答えをもらいました。

0004デフォルトの名無しさん2017/03/25(土) 00:52:32.52 ID:qwoL3pH1
>>2
ググったらみみずんにあった
http://mimizun.com/log/2ch/tech/976462999/

0005デフォルトの名無しさん2017/03/26(日) 18:33:47.40 ID:AnJi4Uz+
Prologに型概念はないと言い切ってよいものだろうか。

0006デフォルトの名無しさん2017/03/30(木) 17:20:53.83 ID:WsRWxyVT
ふと、新聞に載ってる論理パズルを解くプログラムを書きたくなって
Debian に GNU Prolog をインストールして二十数年ぶりに Prolog を楽しんでるのだが、
まだ maplist が実装されていないバージョンだということに今気付いた。
2007 年にリリースされた 1.3.0 らしい。いや、特に困るわけでもないが。
fd_domain や fd_all_different は実装されてるからね。特に不足は無いよ。
不足があるなら自分で新しいのを入れればいいし。まあ、まったりいこう。

0007デフォルトの名無しさん2017/03/31(金) 08:17:08.38 ID:9hE01YVS
>>888
その部分では関数型言語も手続型言語もオブジェクト指向が強調されたものでも記述はできるが、その記述の関係さ

000872017/03/31(金) 08:22:24.23 ID:9hE01YVS
すみません。論理Polog初心者スレと間違えて書き込んでしまいました

0009デフォルトの名無しさん2017/03/31(金) 19:43:34.32 ID:YFIAsqYo
>>5
型はないです。型という概念が使われることもない。外からどう見えようとも。

0010デフォルトの名無しさん2017/04/01(土) 12:04:38.01 ID:gl56yuNT
>>9
本当は integer や float も atom という認識でよかったのではないか

0011デフォルトの名無しさん2017/04/02(日) 16:59:28.60 ID:yhAnz0vw
人工知能といっても今流行ってるDeepLearningの世界にPrologの出番なんて無いと思うんだけどどう関係すんの?

0012デフォルトの名無しさん2017/04/02(日) 18:34:31.57 ID:jRfAXiJp
>>11
DeepLearningを含む機械学習やニューラルネットワークによる認識は
人工知能のごく一部。知識プログラミングにこれがつながるのはそれこそ
進化論的に大変。人間の思考、判断、意志、統制は、シンボル操作がやはり
中心になる。この領域の中心付近に述語論理があり、そういう意味で、
Prologはこの人工知能の世界では今後もずっとに安泰の地位にいる。

0013デフォルトの名無しさん2017/04/02(日) 18:36:10.74 ID:jRfAXiJp
ずっと安泰の地位にいる。 ですね。

0014デフォルトの名無しさん2017/04/02(日) 21:09:04.44 ID:yhAnz0vw
>>12
ごく一部といっても今流行ってるのは機会学習だけでそれ以外は良くも悪くも全く変わってないよね?
だからPrologにとって追い風も何も無いと思うんだが。

0015デフォルトの名無しさん2017/04/02(日) 21:27:14.79 ID: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、
>回答の生成までを単一のネットワークにする

0016デフォルトの名無しさん2017/04/02(日) 22:09:22.59 ID:jRfAXiJp
>>15
>でも人間の曖昧な思考やそれに基づく自然言語は記号処理に還元できない。
こう言い切る根拠がわからない

0017デフォルトの名無しさん2017/04/02(日) 23:31:47.53 ID:KLExlLIQ
>>16
数学の命題のように100%正しい命題なら記号処理に還元できる。
でも風が吹けば桶屋が儲かるのような確率的命題を扱うには
離散値ではなく連続値で推論する仕組みが要る。
ベイジアンネットワークやニューラルネットワークなら確率的命題を扱える。

0018デフォルトの名無しさん2017/04/03(月) 20:35:32.05 ID:r1rinKhd
swi-prologをEmacsで書く環境つくってるんだけど
run-prologで質問にセミコロンで答えてもリターンキーおすまで反応なくて
リターンおすとそこで終りになってしまうんだけどいい対策ないですか?
ターミナルならちゃんと次の答えの候補までだしてくれるんだけど

0019デフォルトの名無しさん2017/04/04(火) 07:19:25.90 ID:KH/GhSFx
ありがとう。そういうことが起こるということには気付いてたけど
shell-mode を使ってるからだということがやっと分かった。
shell-mode では ; を単独で送れるようなキーバインディンディングにはなっていない。
しかし、run-prolog にも同じ問題があるとしたらいささか奇妙なことだと思うのだけど。
とりあえず、; にちゃんと応えてほしいなら ansi-term を使えばいいかも。
もちろん run-prolog を使いたいだろうとは思うけど。
; は諦めて失敗駆動ループで全部出力するという手もあるよ。

0020デフォルトの名無しさん2017/04/04(火) 09:02:08.12 ID: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 の方で対処してくれないと。

0021デフォルトの名無しさん2017/04/04(火) 09:07:01.03 ID:KH/GhSFx
ごめん、M-x じゃなくて M-: だった。

0022デフォルトの名無しさん2017/04/04(火) 17:59:32.06 ID: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-; にしてみた。

0023デフォルトの名無しさん2017/04/04(火) 19:43:46.75 ID:GDXtDLgc
よくわからないけどM-;で%が入力されて
全部の回答がでてきた

0024デフォルトの名無しさん2017/04/09(日) 17:58:20.20 ID:oNfwzwgh
>>10
50数冊Prologの本は出版されていますが
型についての言及はほとんどないですね。

0025デフォルトの名無しさん2017/04/09(日) 20:02:28.24 ID:kB0+YiBD
データ型という意味なら項(term)が該当するのだろうけど
C/C++の型の意味だとPrologは型無し言語にあたるかと・・

0026デフォルトの名無しさん2017/04/10(月) 07:47:09.66 ID:LBDhdaKW
>>25
型とかクラスということを考えると、述語で定義される全体が、それにもっとも近い
ような気がします。変数も単一化の道具のようなもので、事実上ないと言うに近い
ですし。

0027デフォルトの名無しさん2017/04/10(月) 09:56:04.56 ID:EdjYscd8
>>26
Prologの変数って、
長い長い ======================== 等号のように見えますね。

0028デフォルトの名無しさん2017/04/10(月) 10:02:02.44 ID:b+5ml5KP
>>27
その理解で正しいのでは

0029デフォルトの名無しさん2017/04/10(月) 10:16:46.41 ID: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では切れています。

0030デフォルトの名無しさん2017/04/10(月) 10:18:53.87 ID:LBDhdaKW
自由変数なんていう概念が通用することが分かります。

0031デフォルトの名無しさん2017/04/10(月) 12:53:10.94 ID: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 があるバージョンを
使えばいいと思うよ。

0032デフォルトの名無しさん2017/04/13(木) 17:36:21.71 ID:C4pVfI8/
>>29
どれが自由変数なんですか

0033デフォルトの名無しさん2017/04/13(木) 18:49:38.84 ID:zFvhZDnr
>>32
findall/3の方のAです

0034デフォルトの名無しさん2017/04/14(金) 18:45:04.44 ID:Xi9X67bT
ファイルから行ならびを得る(_ファイル,_行ならび) :-
open(_ファイル,read,_入力),
findall(_項,(
repeat,(at_end_of_stream(_入力),close(_入力),!,fail;
行入力(_入力,_行))),_行ならび).

行入力(_入力,_行) :-
read_line_to_codes(_入力,_文字コードならび),
atom_codes(_行,_文字コードならび).

新着レスの表示
レスを投稿する