X



Prologでまったり Part5 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0002デフォルトの名無しさん
垢版 |
2017/03/24(金) 20:35:29.83ID:qYto0KqJ
すみません。最後のPartなしは、リンクが切れていました。
一番肝心のスレッドなのに残念ですね。
0003デフォルトの名無しさん
垢版 |
2017/03/24(金) 20:39:51.26ID:qYto0KqJ
人工知能がブームになりつつあり、Prologにとっては追い風と書いたところ、

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

との答えをもらいました。
0006デフォルトの名無しさん
垢版 |
2017/03/30(木) 17:20:53.83ID:WsRWxyVT
ふと、新聞に載ってる論理パズルを解くプログラムを書きたくなって
Debian に GNU Prolog をインストールして二十数年ぶりに Prolog を楽しんでるのだが、
まだ maplist が実装されていないバージョンだということに今気付いた。
2007 年にリリースされた 1.3.0 らしい。いや、特に困るわけでもないが。
fd_domain や fd_all_different は実装されてるからね。特に不足は無いよ。
不足があるなら自分で新しいのを入れればいいし。まあ、まったりいこう。
0007デフォルトの名無しさん
垢版 |
2017/03/31(金) 08:17:08.38ID:9hE01YVS
>>888
その部分では関数型言語も手続型言語もオブジェクト指向が強調されたものでも記述はできるが、その記述の関係さ
00087
垢版 |
2017/03/31(金) 08:22:24.23ID:9hE01YVS
すみません。論理Polog初心者スレと間違えて書き込んでしまいました
0009デフォルトの名無しさん
垢版 |
2017/03/31(金) 19:43:34.32ID:YFIAsqYo
>>5
型はないです。型という概念が使われることもない。外からどう見えようとも。
0011デフォルトの名無しさん
垢版 |
2017/04/02(日) 16:59:28.60ID:yhAnz0vw
人工知能といっても今流行ってるDeepLearningの世界にPrologの出番なんて無いと思うんだけどどう関係すんの?
0012デフォルトの名無しさん
垢版 |
2017/04/02(日) 18:34:31.57ID:jRfAXiJp
>>11
DeepLearningを含む機械学習やニューラルネットワークによる認識は
人工知能のごく一部。知識プログラミングにこれがつながるのはそれこそ
進化論的に大変。人間の思考、判断、意志、統制は、シンボル操作がやはり
中心になる。この領域の中心付近に述語論理があり、そういう意味で、
Prologはこの人工知能の世界では今後もずっとに安泰の地位にいる。
0014デフォルトの名無しさん
垢版 |
2017/04/02(日) 21:09:04.44ID:yhAnz0vw
>>12
ごく一部といっても今流行ってるのは機会学習だけでそれ以外は良くも悪くも全く変わってないよね?
だからPrologにとって追い風も何も無いと思うんだが。
0015デフォルトの名無しさん
垢版 |
2017/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、
>回答の生成までを単一のネットワークにする
0016デフォルトの名無しさん
垢版 |
2017/04/02(日) 22:09:22.59ID:jRfAXiJp
>>15
>でも人間の曖昧な思考やそれに基づく自然言語は記号処理に還元できない。
こう言い切る根拠がわからない
0017デフォルトの名無しさん
垢版 |
2017/04/02(日) 23:31:47.53ID:KLExlLIQ
>>16
数学の命題のように100%正しい命題なら記号処理に還元できる。
でも風が吹けば桶屋が儲かるのような確率的命題を扱うには
離散値ではなく連続値で推論する仕組みが要る。
ベイジアンネットワークやニューラルネットワークなら確率的命題を扱える。
0018デフォルトの名無しさん
垢版 |
2017/04/03(月) 20:35:32.05ID:r1rinKhd
swi-prologをEmacsで書く環境つくってるんだけど
run-prologで質問にセミコロンで答えてもリターンキーおすまで反応なくて
リターンおすとそこで終りになってしまうんだけどいい対策ないですか?
ターミナルならちゃんと次の答えの候補までだしてくれるんだけど
0019デフォルトの名無しさん
垢版 |
2017/04/04(火) 07:19:25.90ID:KH/GhSFx
ありがとう。そういうことが起こるということには気付いてたけど
shell-mode を使ってるからだということがやっと分かった。
shell-mode では ; を単独で送れるようなキーバインディンディングにはなっていない。
しかし、run-prolog にも同じ問題があるとしたらいささか奇妙なことだと思うのだけど。
とりあえず、; にちゃんと応えてほしいなら ansi-term を使えばいいかも。
もちろん run-prolog を使いたいだろうとは思うけど。
; は諦めて失敗駆動ループで全部出力するという手もあるよ。
0020デフォルトの名無しさん
垢版 |
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 の方で対処してくれないと。
0021デフォルトの名無しさん
垢版 |
2017/04/04(火) 09:07:01.03ID:KH/GhSFx
ごめん、M-x じゃなくて M-: だった。
0022デフォルトの名無しさん
垢版 |
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-; にしてみた。
0025デフォルトの名無しさん
垢版 |
2017/04/09(日) 20:02:28.24ID:kB0+YiBD
データ型という意味なら項(term)が該当するのだろうけど
C/C++の型の意味だとPrologは型無し言語にあたるかと・・
0026デフォルトの名無しさん
垢版 |
2017/04/10(月) 07:47:09.66ID:LBDhdaKW
>>25
型とかクラスということを考えると、述語で定義される全体が、それにもっとも近い
ような気がします。変数も単一化の道具のようなもので、事実上ないと言うに近い
ですし。
0027デフォルトの名無しさん
垢版 |
2017/04/10(月) 09:56:04.56ID:EdjYscd8
>>26
Prologの変数って、
長い長い ======================== 等号のように見えますね。
0029デフォルトの名無しさん
垢版 |
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では切れています。
0031デフォルトの名無しさん
垢版 |
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 があるバージョンを
使えばいいと思うよ。
0033デフォルトの名無しさん
垢版 |
2017/04/13(木) 18:49:38.84ID:zFvhZDnr
>>32
findall/3の方のAです
0034デフォルトの名無しさん
垢版 |
2017/04/14(金) 18:45:04.44ID:Xi9X67bT
ファイルから行ならびを得る(_ファイル,_行ならび) :-
open(_ファイル,read,_入力),
findall(_項,(
repeat,(at_end_of_stream(_入力),close(_入力),!,fail;
行入力(_入力,_行))),_行ならび).

行入力(_入力,_行) :-
read_line_to_codes(_入力,_文字コードならび),
atom_codes(_行,_文字コードならび).
0035デフォルトの名無しさん
垢版 |
2017/05/03(水) 22:12:53.29ID:jbhMxViH
The Art of Prolog が PDF で公開されてるのはいいんだけど、テキストデータは無いのかな……
tesseract-ocr でテキスト化してるけど結構大変だ。
0036デフォルトの名無しさん
垢版 |
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ということになり、
想像以上に大きくなった。
003736
垢版 |
2017/06/13(火) 23:46:21.36ID:3xaVR795
処理系は SWI-Prologインタプリタ (64bit版)

アトムテーブルがハッシュで管理されているとして、こんなにメモリを消費
するものだろうか。
0038デフォルトの名無しさん
垢版 |
2017/06/14(水) 20:28:21.72ID:/Jq2k2dd
SWI-Prologインタプリタ

一方、atomの生成をやめて、グローバルスタックにリストして整数を積む。

?- findall(N,between(1,500000000,N),L).

これだと1リスト要素ごとに24バイト消費する。
0039デフォルトの名無しさん
垢版 |
2017/06/15(木) 06:08:36.12ID:OS4b1hKm
Microsolft Azure の一時間あたりの料金

G5: 32 コア, 448 GB RAM,6144GB ディスク, \1,044.276/時間

消費税込みで月間81万円くらい。
0040デフォルトの名無しさん
垢版 |
2017/06/15(木) 06:12:07.38ID:OS4b1hKm
448GBメモリを使うことができれば、
Prologのオンメモリデータベースで大企業でもかなりの部分がカバーできる。
ディスクストレージへのバックアップ時間など、課題もあるだろうが。
0042デフォルトの名無しさん
垢版 |
2017/06/15(木) 06:41:01.44ID:SczZ9hH4
>>41
近い将来には1TBメモリ 100万/月になるだろう
そうなると、プログラム言語の中で最もその恩恵を受けるのはPrologということか
0043デフォルトの名無しさん
垢版 |
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.
0044デフォルトの名無しさん
垢版 |
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 倍くらいなら驚くほどではないと思う。
0045デフォルトの名無しさん
垢版 |
2017/06/16(金) 07:24:41.91ID:3eXmF8sI
>>39
>>40
>>42
クラウドだとコストかかりすぎだけど
オンメモリデータベースとしての用途は
将来的に今よりもっと出てきそうだね
0046デフォルトの名無しさん
垢版 |
2017/06/16(金) 16:54:43.29ID:TakoXWt8
>>44
ありがとうございます。3.5倍だとして、ハッシュテーブル等の構築の仕方の
差でしょうか。
0047デフォルトの名無しさん
垢版 |
2017/06/21(水) 20:47:56.02ID:v8ZlsGJ1
それにしても一億節になると一節の追加時間が二万分の一秒と極端に遅い。
ハッシュの重なりが1万通りくらい出てきて平均5000回リンクを辿ると
いうことか。
0051デフォルトの名無しさん
垢版 |
2017/07/01(土) 13:39:49.52ID:yvgbUlYU
制約論理プログラミングってのでPrologの色んな弱点緩和されてるっぽい。
SWI-Prologにもclpfdなるライブラリで提供されてるらしいけど使ってる?
0052デフォルトの名無しさん
垢版 |
2017/07/02(日) 06:07:25.30ID:b2F1GUNM
>>51
全く使っていない
0053デフォルトの名無しさん
垢版 |
2017/07/02(日) 06:58:37.04ID:7x1CJ3Ta
GNU Prolog で制約論理プログラミングしてるよ。
ゼブラパズルに置き換えられる問題は世の中に結構ある。
0054デフォルトの名無しさん
垢版 |
2017/07/03(月) 05:54:57.56ID:6QSWtKdI
Prologがメジャーに復帰するためにはもう少し生きたプログラムが
表面に出てこないと
0055デフォルトの名無しさん
垢版 |
2017/07/03(月) 10:52:00.94ID:p/temOJb
それに尽きる
0056デフォルトの名無しさん
垢版 |
2017/08/02(水) 11:00:33.21ID:AyM7Pnm7
>>48
これって、第四の受動素子「メモリスタ」を使った奴だね。
いずれはこれに置き換わっていくのかな・・・
0057デフォルトの名無しさん
垢版 |
2017/08/02(水) 12:36:37.86ID:E8GFzbft
Prologのサンプルみたいんだけど、これって他のOOP言語とかでもライブラリとして実装可能じゃない?
0059デフォルトの名無しさん
垢版 |
2017/08/02(水) 20:40:47.00ID:E8GFzbft
じゃあprologを使うメリットって何?
いや、別にprologをdisりたい訳じゃないけどどういう言語なのかなと思って
0060デフォルトの名無しさん
垢版 |
2017/08/03(木) 04:03:02.89ID:WCischub
Prolog Programming for Artificial Intelligence (4th Edition)ってどうですか?
いい本なら買うつもりです
0061デフォルトの名無しさん
垢版 |
2017/08/03(木) 12:49:51.06ID:0ZfpTseB
>>59
Prolog専用の言語環境を使うメリットの話?
そりゃ他言語のライブラリより
餅は餅屋で機能が豊富だから
0062デフォルトの名無しさん
垢版 |
2017/08/04(金) 03:49:13.37ID:kIgI5e6Z
>>3
関数型の次は論理型がくる
0065デフォルトの名無しさん
垢版 |
2017/08/06(日) 11:05:55.46ID:peki0++3
赤軍は?
0066デフォルトの名無しさん
垢版 |
2017/08/06(日) 12:59:05.66ID:SmKvCm0C
>65

>赤軍は?

赤軍というのは、通常は旧ソ連の軍隊のこと。
赤軍合唱団というのもありますが、
あなたの言いたいのは、日本の「連合赤軍」のこと
でしょう?
0069デフォルトの名無しさん
垢版 |
2017/08/07(月) 09:24:07.63ID:tdYEUDnr
>68

>65では、
>赤軍は?

と書いてあって、

赤軍派?

とは、書いてありませんが。
実は「派」の字は書いてあったのだが、
私が老眼の為に見えなかったのでしょうか。
0072デフォルトの名無しさん
垢版 |
2017/10/25(水) 11:21:14.75ID:ozqNX1fD
ラズパイ上で動くPrologが既にあるのだが、どんなアプリが面白いだろうか
0074デフォルトの名無しさん
垢版 |
2017/12/21(木) 08:15:15.55ID:EOeEZWwX
Prologって型定義をしないけど型が全くないという訳ではない
アトム、アトミック、整数、浮動小数点数、リスト
だけどそれ以上に区別する気はない
0075デフォルトの名無しさん
垢版 |
2017/12/21(木) 09:32:27.33ID:ewcS0SAQ
ラバパイではそういうわけにはいかないが最近の速いパソコンだとPrologの一つの単一化も
3ナノ秒以下で実行されるらしい
Prologは遅いからとかの言い訳は利かないのかも
0077デフォルトの名無しさん
垢版 |
2018/02/16(金) 06:41:22.56ID:W1XJdyx1
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
0079デフォルトの名無しさん
垢版 |
2018/03/23(金) 04:08:26.39ID:6jIYybpe
自然言語処理はPrologの得意分野だからな
0081デフォルトの名無しさん
垢版 |
2018/05/01(火) 08:58:56.17ID:fTDqzH+p
法律の条文解釈をHaskellでやってるのは見た事あるけど、Prologって、そういうのも可能なんだろうか?
0082デフォルトの名無しさん
垢版 |
2018/05/02(水) 03:42:05.92ID:MIS1A4AD
日本の法律は厳密に定義されていない部分がわりにあってうまくいかないという話をどこかで読んだことあるな
実際の基準や閾値は判例見ないとわからなかったりとか
そういうあいまいなところを実情に合わせて柔軟に解釈して運用することで時代の変化にある程度追従していけるようにしてあるのかも
0084デフォルトの名無しさん
垢版 |
2018/05/23(水) 20:04:35.28ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

E5JQH
0085デフォルトの名無しさん
垢版 |
2018/07/05(木) 01:36:48.58ID:RfoszcD2
Z7K
0086デフォルトの名無しさん
垢版 |
2018/11/05(月) 10:15:56.17ID:j3sHpoUt
WikipediaのPrologの記載にある種の執念を感じた(笑)
0090デフォルトの名無しさん
垢版 |
2018/11/11(日) 17:51:52.84ID:96wp+TZd
NGゆき
0092デフォルトの名無しさん
垢版 |
2019/02/26(火) 20:00:32.82ID:W0wJxBNy
yarnに採用!おめでとう!
https://jser.info/2019/02/26/yarn-v2berryfastify-v2tslint/
また、ワークスペースの改善としてConstraintsというProlog(実際にはtau-prolog)を使った制約を扱うプラグインが追加されています。ワークスペース間の依存などのルールをPrologを使って記述して、より効率的に扱えるようにするのが目的のようです。

>>91
くやしく。
0093デフォルトの名無しさん
垢版 |
2019/02/27(水) 02:39:32.99ID:uWJyq6/U
パッケージ管理やビルドツールにPrologを使うというのは(Prologを使える人が少ないという点を除けば)極めて良いアイデアだと思う
0094デフォルトの名無しさん
垢版 |
2019/02/27(水) 02:48:11.64ID:WT+xSYik
なんで今まで誰もやらなかったのかね
0095デフォルトの名無しさん
垢版 |
2019/02/27(水) 12:50:03.80ID:+TCpifLa
makeで足りてるから
0096デフォルトの名無しさん
垢版 |
2019/03/06(水) 18:36:48.48ID:fBh61pOJ
Prologでリストを使わない人はいないと思うのだけれど、
引数の部分にリスト以外の複合項を全く書かない人もいる。一方、引数に終始、複合項や式が
出続ける書き手もいる。
もちろん、対象領域が違うからという理由が大きいのだけれど、そのことは少し軽く見て、
そういう視点で観察してプログラマを分類してみるのも面白い。
0097デフォルトの名無しさん
垢版 |
2019/03/08(金) 22:49:07.51ID:NeLzfZqe
Prologの本はいっぱいあるけど、GHC系言語の解説書ってないのかなぁ。
あれでどんなプログラミングができるのかいまいちイメージがつかめない。
0100デフォルトの名無しさん
垢版 |
2019/03/08(金) 23:25:00.97ID:NeLzfZqe
そうなんだ?
Prologを踏まえて作られたものだから少なくともそれよりは利点があるものと思ったけど。
0103デフォルトの名無しさん
垢版 |
2019/04/17(水) 08:44:19.08ID:28onwIaH
>>40
SSDだと遅い?
0104デフォルトの名無しさん
垢版 |
2019/06/07(金) 12:04:24.13ID:Vw8dl1xl
>>96
私は アトム+リスト 派だな。RDBの影響からか構造体は書かない。
0105デフォルトの名無しさん
垢版 |
2019/06/10(月) 16:41:53.47ID:JdO3de0t
'1文字ずつ交互に1つの文字配列に格納し'(_文字列_1,_文字列_2,_文字数,_文字ならび) :-
findall(_文字,一文字ずつ交互に(_文字列_1,_文字列_2,_文字数,_文字),_文字ならび).

一文字ずつ交互に(_文字列_1,_文字列_2,_文字数,_文字) :-
between(0,_文字数,N),
交互に(_文字列_1,_文字列_2,N,_文字).

交互に(_文字列_1,_文字列_2,N,_文字) :-
sub_atom(_文字列_1,N,1,_,_文字).
交互に(_文字列_1,_文字列_2,N,_文字) :-
sub_atom(_文字列_2,N,1,_,_文字).
0106デフォルトの名無しさん
垢版 |
2019/07/01(月) 21:23:07.04ID:VvtU1+Ac
% 今日書いたプログラム

solve( _,0,New,New) :-
!.

solve( [],_,_,_) :-
!, fail.

solve( [_|T],R,B,New) :-
solve( T,R,B,New).

solve( [H|_],R,_,_) :-
R < H,
% write( R-H),nl,
!, fail.

solve( [H|T],R,B,New) :-
RN is R - H,
% write( RN-[H|B]),nl,
solve( T,RN,[H|B],New).

main :-
Elem = [9729,8895,8572,7627,6576,6460,5842,5496,5467,2921,1685,511],
solve( Elem,31178,[],New),
write( New),nl,
true.
0107デフォルトの名無しさん
垢版 |
2020/03/05(木) 19:56:08.14ID:h922Dn8C
>>86
あれメチャクチャ詳しくて助かるわ!
自治厨に消されるかもしれないから
ページをローカルに保存してあるぞ
0109デフォルトの名無しさん
垢版 |
2020/05/20(水) 09:33:08.57ID:Dfazl3Af
朝日新聞x電通=0
0110デフォルトの名無しさん
垢版 |
2020/05/21(木) 10:05:05.65ID:p6Pkr9q+
AZ-Prologですね
0111デフォルトの名無しさん
垢版 |
2020/05/21(木) 10:25:23.25ID:p6Pkr9q+
>>105
これ間違っていますね。_文字数の意味が今ひとつ不明ですが多分、

'1文字ずつ交互に1つの文字配列に格納し'(_文字列_1,_文字列_2,_文字数,_文字ならび) :-
_文字数_1 is _文字数 - 1,
findall(_文字,一文字ずつ交互に(_文字列_1,_文字列_2,_文字数_1,_文字),_文字ならび).

でないといけません。
0112デフォルトの名無しさん
垢版 |
2020/06/05(金) 03:01:05.09ID:p2r1F5vv
Prologで文脈自由文法が出来ると聞いてやってきた
情報求む

簡単にオートマトン書けるし良い言語だな
0113デフォルトの名無しさん
垢版 |
2020/06/05(金) 23:08:38.31ID:d3cW9y/k
W. F. Clocksin/C.S. Mellish著、中村克彦訳
『Prologプログラミング』(日本コンピュータ協会刊行)

「第9章 文法規則の使用」
には、文脈自由文法をPrologで実現する方法が解説されて
いますl
0114デフォルトの名無しさん
垢版 |
2020/06/06(土) 00:52:50.14ID:P2ph+/53
>>113
情報サンクス!

Prologって知れば知るほど面白い言語だな
オートマトンもコンパイラも簡潔に書ける
乗り換え案内的なヤツもすぐ作れそうなのに配列の最大値を求めるとかは他の言語の方が楽に書けそうだな
特定のジャンルのアルゴリズム特化型言語か

独自のアレンジ加えたくて、今、swi-prolog本体のソース読み始めて分かったことは、
visibility("hidden")のattributeが設定されてるからソース書き換えないとinstrument-functionsを使った関数トレースが出来ない
C言語で15万行(ステップ数)ぐらい
qlfとかいう超高速読み込み可能な中間コードを生成してる
PL_next_solution()からVMの処理が始まるかも(違ったらスマン)
ぐらいかな
0116デフォルトの名無しさん
垢版 |
2020/09/15(火) 14:31:15.52ID:aWAWrZMP
帰納論理プログラミングってプログラムの入出力の正しい例と不正解の例をあたえて機械学習でプログラムを作るはなしでいいんだよね?
最近のニューラルネットワークから影響受けた進歩はどんなのがあるの?
決定木を作りたい分野?だからあまり影響うけてないのかな。
0118デフォルトの名無しさん
垢版 |
2020/11/20(金) 20:30:34.02ID:kpOgVe3q
>>117
フィボナッチ数列の定義で40番目前後で、計算できなくなっていた定義に、
途中で計算できた値を動的に asserta((fib(N) :- !)) してしまうと途端に巨大な
フィボナッチ数列を生成できるようになる。この場合は自分でassertaしているが
それを処理系が全ての目標に対して、結果を書留め、その結果を優先して利用する。
Prologの速度の遅さを改善し、深さ優先探索では計算不能の場合でも解が得られる
ケースがある。
0120デフォルトの名無しさん
垢版 |
2020/11/23(月) 02:51:39.97ID:XIoHPhIo
miniKanrenのcondeとかcondaとかconduとか用語の名前つけの意味が分からん。
どっかに書いてあるの?
てかこんな変な略語にする意味あるの??学びにくい
0121デフォルトの名無しさん
垢版 |
2020/11/25(水) 10:47:14.62ID:m/dxKoiX
>>118

> >>117
> フィボナッチ数列の定義で40番目前後で、計算できなくなっていた定義に、
> 途中で計算できた値を動的に asserta((fib(N) :- !)) してしまうと途端に巨大な
> フィボナッチ数列を生成できるようになる。この場合は自分でassertaしているが
> それを処理系が全ての目標に対して、結果を書留め、その結果を優先して利用する。
> Prologの速度の遅さを改善し、深さ優先探索では計算不能の場合でも解が得られる
> ケースがある。
副作用がある述語を含んだ述語はメモ化しないとかするん?
0122デフォルトの名無しさん
垢版 |
2021/02/04(木) 08:23:36.35ID:JjBI2OlW
>>121
確かに、解がその時その時で変わる目標もあるので、そのことをどう見抜くのだろうか
0123デフォルトの名無しさん
垢版 |
2021/05/21(金) 17:21:50.55ID:ZyYdcxQO
要素位置が同じ(_n番目,L1,L2,L1のn番目,L2のn番目) :-
要素位置が同じ(1,_n番目,L1,L2,L1のn番目,L2のn番目).

要素位置が同じ(N,_n番目,[A|_],[B|_],A,B).
要素位置が同じ(M,_n番目,[_|R1],[_|R2],A,B) :-
succ(M,N),
要素位置が同じ(N,_n番目,R1,R2,A,B).
0124デフォルトの名無しさん
垢版 |
2021/05/21(金) 17:34:04.02ID:ZyYdcxQO
% 遅いですが、これでも同じ結果がでます。

要素位置が同じ(_n番目,L1,L2,L1のn番目,L2のn番目) :-
nth1(_n番目,L1,L1のn番目),
nth1(_n番目,L2,L2のn番目).
0125デフォルトの名無しさん
垢版 |
2021/05/22(土) 04:06:27.31ID:EzA/TCTS
Prologでは非決定性の述語に書いていくというのが普通です。

春の七草(セリ).
春の七草(ナズナ).
春の七草(ゴギョウ).
春の七草(ハコベラ).
春の七草(ホトケノザ).
春の七草(スズナ).
春の七草(スズシロ).

この春の七草/1という述語は非決定性です。
つまり、所謂データベースは非決定性述語だということになります。
0126デフォルトの名無しさん
垢版 |
2021/05/22(土) 06:37:34.55ID:EzA/TCTS
'春の七草の名前の中に「スズ」が入るのは'(_名前の中にスズが入る春の七草) :-
春の七草(_名前の中にスズが入る春の七草),
sub_atom(_名前の中にスズが入る春の七草,_,_,_,スズ).

のように検索します。sub_atom/5の第二、第三、第四引数はそれぞれ
匿名変数になっていますが、ここは本来
第二引数 : 変位
第三引数 : 文字数
第四引数 : 残り文字数
が来るところです。この検索ではこの情報は必要がないから匿名変数にしてあります。
0127デフォルトの名無しさん
垢版 |
2021/05/22(土) 06:58:50.79ID:EzA/TCTS
'春の七草の名前の中に「スズ」が入るのは'(_名前の中にスズが入る春の七草) :-
春の七草(_春の七草),
sub_atom(_春の七草,_,_,_,スズ),
_春の七草 = _名前の中にスズが入る春の七草.

% この方が良いという意見もある。私は >>126 で構わないと思いますが。
0128デフォルトの名無しさん
垢版 |
2021/05/22(土) 10:57:31.66ID:EzA/TCTS
Prologで項を読み込む時は read や read_term を使うけれど、syntax errorにならないように気を使わなくてはならず、さらに最後にピリオドが必要だったりであまり使われない。
SWI-Prologでは文の読み取りは read_line_to_string/2 が主に使われるようだ。

?- read_line_to_string(current_input,S).

とかやると、プロンプトが出てきて、入力可能になる。アルファベットと認識できる文字なら空白があろうとビリオドがあろうと全体がストリングとして読み取られる。
0129デフォルトの名無しさん
垢版 |
2021/05/22(土) 11:35:44.08ID:EzA/TCTS
さて、read_line_to_string/2の第二引数にはStringが来る。このString。少々ヘンである。

?- read_line_to_string(current_input,X),name(Y,X).
|: 山下
X = "山下",
Y = 山下.

?- name(山下,X).
X = [23665, 19979].

?- read_line_to_string(current_input,[23665,19979]).
|: 山下
false.

?-
伝統的にnameの第二引数にStringが来ると第一引数には対応するアトムが単一化される。確かそうなっているようだが、これをread_line_to_stringの第二引数にもってくるとfalse.となる。
0130デフォルトの名無しさん
垢版 |
2021/05/22(土) 11:43:12.26ID:EzA/TCTS
もう少しやってみると

?- read_line_to_string(current_input,X),X = [97,98].
|: ab
false.

?- "ab" = [97,98].
false.

?- name(X,"ab").
X = ab.

?-
name/2とは第二引数にStringと文字コードリストが入り得る仕様のようだ。
それではなぜ第一引数にアトムがくると文字コードリストが選択されるのか。
双方向性の述語の仕様として異様である。
0131デフォルトの名無しさん
垢版 |
2021/05/22(土) 11:54:49.12ID:EzA/TCTS
実際には、Stringであるかatomであるかはほとんど気にせず使っている。理由は、

?- read_line_to_string(current_input,S),sub_atom(S,0,1,_,X).
|: 山下
S = "山下",
X = 山.

のようにsub_atom/5やatom_concat/3を介すると自動的にatomに変換されてしまう。
ほとんどの文字列処理ではこれらの組込述語を使うことになるためStringとatomについて心配する必要がない。
ただし、
?- read_line_to_string(current_input,S),assertz(S).
|: 山下
これはエラーになる。Stringを述語名に持ってくることはできない。
0132デフォルトの名無しさん
垢版 |
2021/05/24(月) 13:39:16.27ID:pTUv/8tK
>>131
?- read_line_to_string(current_input,S),string_to_atom(S,A),assertz(A).
のようにアトムに変換する述語を介すれば定義可能。
0133デフォルトの名無しさん
垢版 |
2021/05/24(月) 14:45:39.55ID:pTUv/8tK
SWI-Prologにはconsult/1とreconsult/1の区別がない。全部、reconsult/1となる。これによって間違いは少なくなるが、ここと言う時にまとめての節の追加assertzがし難い。このような仕様になっているのは、述語定義とそれが記述されているソースファイルを一対一に対応させたいからなのだろう。
0134デフォルトの名無しさん
垢版 |
2021/05/28(金) 02:54:03.56ID:c1aNJ6R+
別のスレで話題が出ていたPrologの小学校授業の実践例。
私は聞かないのだが、試みている方いますか?
0135デフォルトの名無しさん
垢版 |
2021/05/28(金) 02:56:30.10ID:c1aNJ6R+
>>134
5chでこの質問は無理かな。twitterで問いかけてみよう。
0136デフォルトの名無しさん
垢版 |
2021/05/28(金) 03:08:05.89ID:cfWnMWR2
Prologおじさんは真夜中に仕事!
0137デフォルトの名無しさん
垢版 |
2021/06/01(火) 15:31:29.00ID:IjgT90G7
>>5

いや、Prologは動的な型はあるぞ。
integer/1 で整数であるか調べたりもできる。
型がなかったら整数かどうかを調べることもできない。
0138デフォルトの名無しさん
垢版 |
2021/06/01(火) 15:35:19.88ID:IjgT90G7
>>59
TAPLみたいな型理論を理解するには述語論理を使えるPrologを使うと理解がしやすいと思うんだがな。
単一化もあるから型推論も簡単にかけるし。
0139デフォルトの名無しさん
垢版 |
2021/06/01(火) 15:44:36.37ID:IjgT90G7
>>128
定理証明支援系のCoqも.で終わったりします。
Coqで.を使う言語は言語を扱うメタな言語の方なので、
Prologと共通点があるのかもw
0140デフォルトの名無しさん
垢版 |
2021/06/01(火) 19:28:43.26ID:NMxDDUXJ
>>137
Prologで整数や数値が「型」かどうかとなると相当に怪しい。
単に計算対象になる整数。数値。そしてアトム。それだけ。
複合項のパターンを纏めるつもりが全くない言語で型があると言ってよいものだろうか。
0141デフォルトの名無しさん
垢版 |
2021/06/02(水) 00:05:18.95ID:PGTV1esh
Prologの規格にPrologと型という概念は相容れないという記述でもあるのか?
教えてくれ
0144デフォルトの名無しさん
垢版 |
2021/06/02(水) 02:56:41.74ID:BUsn5VkI
>>141
50数冊発行されている日本語のProlog書の中で、索引に型という項目が存在するのは3冊だけ
やはり単一化が相当に重いから、さらに型付をしたいとは思わないということでは
0145デフォルトの名無しさん
垢版 |
2021/06/02(水) 08:33:49.33ID:WwionR+x
>>144
型という概念はFORTRANの時代からあったわけだし、使ってもよかったはずだけれど
使わなかった。アトムだけで行きたかったけれど妥協して数値は作った。
論理変数に型付けなんて論外。要するにほんの少しでも決まり事を減らしたい。そういう世界。
0146デフォルトの名無しさん
垢版 |
2021/06/02(水) 08:42:56.55ID:BUsn5VkI
>>145
最初から確信を持ってそうなのだから、所謂ガルパゴス化ではないと
0147デフォルトの名無しさん
垢版 |
2021/06/02(水) 12:47:50.87ID:BUsn5VkI
述語論理とかHaskellがあがっていますが、
小6では述語論理やPrologでは遅すぎ。Haskellでは早すぎるのではないでしょうか。
0148デフォルトの名無しさん
垢版 |
2021/06/02(水) 12:50:22.32ID:BUsn5VkI
>>147
すみません。これ誤爆でした。
0149デフォルトの名無しさん
垢版 |
2021/06/04(金) 09:27:00.93ID:y0+/+oEy
「文字を覚えたときがPrologの覚えどき」
とは、言い得ると思うのですが、さて、この「文字を覚えたとき」を何時とみるか。
5才なのか、7才なのか、それとも・・・
0150デフォルトの名無しさん
垢版 |
2021/06/04(金) 09:39:23.01ID:W7exS3i6
>>149
個人差がある。幼稚園に入るために予備校に行ってる児童もいる。この場合は4才だって行けるだろうし。
0151デフォルトの名無しさん
垢版 |
2021/06/04(金) 11:51:33.16ID:y0+/+oEy
公立の小学校なら二年生から。そういう言い方をしないといけないのかな。
0153デフォルトの名無しさん
垢版 |
2021/06/05(土) 05:28:48.44ID:WQBHghpu
わりと興味はあるが書店行っても大学の教材みたいな内容の本しかないのが辛い
CやJavaみたいな初心者向けの入門書(それでいてそれなりに深いとこまでやるゴツくて厚いやつ)欲しい
教材タイプのって数学の教科書みたいな、必要十分なこと書いてはい説明終わり、ここまでの内容でこの問題できるからなやっとけよ、で突き放されて分からないまま途方に暮れて終わる
0154デフォルトの名無しさん
垢版 |
2021/06/05(土) 08:05:06.46ID:st3XvE6E
>>153
適切な表現かどうかわからないが、Prologの『逆引き』本がほしい。
アプリのグループでまとめたもの。まとまった単位のソースが得られ
ればそれをヒントに作り替えたり、そこまでできなくても深く学ぶこ
とができる。
0155デフォルトの名無しさん
垢版 |
2021/06/06(日) 19:15:04.37ID:n4lTECsD
>>140
マーキュリーとか普通にHM型付けしてたりしてますよ。
型クラスもあるしw

integerはatomの部分型と考えることができますし。
numberもatomの部分型
string型もあるし、objectもありますよね。
動的型付けな言語は多かれ少なかれそう言った型システムに守られているので、型なしで未定義エラーで死んだりしません。
0156sage
垢版 |
2021/06/06(日) 19:19:06.05ID:n4lTECsD
>>147
Prolog を型理論を学習する前後で勉強すると良いのではと思う今日この頃です。
述語論理は普通のプログラマにとってとっつき辛いのでTAPLは難解だと言われている。
Prolog で一階述語論理を理解しておくと図が簡単に実装できるので便利w
0157sage
垢版 |
2021/06/06(日) 19:27:41.20ID:n4lTECsD
>> 152
日本語プログラミングとか、型理論とかは確かにオーソドックスじゃないのかもなぁ。
Prologの得意分野は非決定的な計算や言語を扱いやすい点にあるので、言語機能の実験にちょろっと使うのに便利w
だからプログラミング言語の論文で広く述語論理が使われてるのだと思う。
0158sage
垢版 |
2021/06/06(日) 19:30:01.30ID:n4lTECsD
Prologは文法を意識しないで日本語が話せるように使うことができるという意味で簡単だ。
しかし言語の文法を意識して研究する場合にも有用であるので、とっつきやすい人はとっつきやすいのだけど、文法がどうのって話になると途端に敷居が上がる言語だと思いますな。
0159デフォルトの名無しさん
垢版 |
2021/06/10(木) 12:53:16.61ID:gzqz1I/r
>>141
ISOの規格(ISO/IEC 13211-1)では7.1に4頁ほどを割いています。floatやintegerそしてリストの説明。
しかし、冒頭のやや下に

NOTE - Prolog is not a typed language, and an argument of
a compound term or predication tan be any term whatsoever.
・・・
から始まるコメントがあり、その内容は私には不可解ですが、全くtypesを重視しない、そして
言語としてはこの問題に関わらない姿勢だけは読み取れます。
0160デフォルトの名無しさん
垢版 |
2021/06/10(木) 23:11:29.64ID:8rzcBiSm
んー.この註釈が型について語っていることはむしろ逆だろう.
Nonetheless, some predications can be satisfied only when the arguments possess particular properties, and some evaluable functors are defined only when the operands (3.121) possess some particular property.
と続くが,some particular property はつまり型じゃない?
これはrubyとかlispを型なし言語と表現するようなものじゃないかな.
アトミックな項か複合項しかない(型なし言語)にもかかわらず,some particular property をみて処理する(型がある)わけでしょう?
0161デフォルトの名無しさん
垢版 |
2021/06/13(日) 16:17:57.28ID:Mv2X7sgn
>>159
プログラミング言語を広く見た場合にPrologは動的型付け言語な言語なのだけど、
Prolog 文化としては動的型付け言語は型なし言語と標準を作る際でも呼んでいる。
標準化委員会の趣味や趣向、時代的な背景の違いによる用語選択の違いでしょう。
0163デフォルトの名無しさん
垢版 |
2021/07/10(土) 07:22:38.57ID:oQhiue2Q
悲しい
失われる前に知識のアーカイブ化を
0164デフォルトの名無しさん
垢版 |
2021/07/10(土) 14:20:04.35ID:hyh546Qk
@TakaoOzaki
肺癌進行
最短経路でpinpinころり
南無南無
0165デフォルトの名無しさん
垢版 |
2021/12/26(日) 11:33:27.89ID:5417YXm0
快方に向かっているようでよかった。
0166デフォルトの名無しさん
垢版 |
2023/07/07(金) 23:08:08.10ID:dbf8ktWh
その後どうだい?
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況