2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

Prologでまったり Part5

1 :デフォルトの名無しさん:2017/03/24(金) 14:51:42.44 ID:ZNjVJLCP.net
過去スレ
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/

119 :デフォルトの名無しさん:2020/11/13(金) 21:40:55.37 ID:YvL+uxnX.net
Tabled Prologって何ですか?何が凄いの?

120 :デフォルトの名無しさん:2020/11/20(金) 20:30:34.02 ID:kpOgVe3q.net
>>119
フィボナッチ数列の定義で40番目前後で、計算できなくなっていた定義に、
途中で計算できた値を動的に asserta((fib(N) :- !)) してしまうと途端に巨大な
フィボナッチ数列を生成できるようになる。この場合は自分でassertaしているが
それを処理系が全ての目標に対して、結果を書留め、その結果を優先して利用する。
Prologの速度の遅さを改善し、深さ優先探索では計算不能の場合でも解が得られる
ケースがある。

121 :デフォルトの名無しさん:2020/11/20(金) 21:17:41.49 ID:YhokOqrJ.net
全然わからない…うわーん

122 :デフォルトの名無しさん:2020/11/23(月) 02:51:39.97 ID:XIoHPhIo.net
miniKanrenのcondeとかcondaとかconduとか用語の名前つけの意味が分からん。
どっかに書いてあるの?
てかこんな変な略語にする意味あるの??学びにくい

123 :デフォルトの名無しさん:2020/11/25(水) 10:47:14.62 ID:m/dxKoiX.net
>>120

> >>119
> フィボナッチ数列の定義で40番目前後で、計算できなくなっていた定義に、
> 途中で計算できた値を動的に asserta((fib(N) :- !)) してしまうと途端に巨大な
> フィボナッチ数列を生成できるようになる。この場合は自分でassertaしているが
> それを処理系が全ての目標に対して、結果を書留め、その結果を優先して利用する。
> Prologの速度の遅さを改善し、深さ優先探索では計算不能の場合でも解が得られる
> ケースがある。
副作用がある述語を含んだ述語はメモ化しないとかするん?

124 :デフォルトの名無しさん:2021/02/04(木) 08:23:36.35 ID:JjBI2OlW.net
>>123
確かに、解がその時その時で変わる目標もあるので、そのことをどう見抜くのだろうか

125 :デフォルトの名無しさん:2021/05/21(金) 17:21:50.55 ID:ZyYdcxQO.net
要素位置が同じ(_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).

126 :デフォルトの名無しさん:2021/05/21(金) 17:34:04.02 ID:ZyYdcxQO.net
% 遅いですが、これでも同じ結果がでます。

要素位置が同じ(_n番目,L1,L2,L1のn番目,L2のn番目) :-
nth1(_n番目,L1,L1のn番目),
nth1(_n番目,L2,L2のn番目).

127 :デフォルトの名無しさん:2021/05/22(土) 04:06:27.31 ID:EzA/TCTS.net
Prologでは非決定性の述語に書いていくというのが普通です。

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

この春の七草/1という述語は非決定性です。
つまり、所謂データベースは非決定性述語だということになります。

128 :デフォルトの名無しさん:2021/05/22(土) 06:37:34.55 ID:EzA/TCTS.net
'春の七草の名前の中に「スズ」が入るのは'(_名前の中にスズが入る春の七草) :-
春の七草(_名前の中にスズが入る春の七草),
sub_atom(_名前の中にスズが入る春の七草,_,_,_,スズ).

のように検索します。sub_atom/5の第二、第三、第四引数はそれぞれ
匿名変数になっていますが、ここは本来
第二引数 : 変位
第三引数 : 文字数
第四引数 : 残り文字数
が来るところです。この検索ではこの情報は必要がないから匿名変数にしてあります。

129 :デフォルトの名無しさん:2021/05/22(土) 06:58:50.79 ID:EzA/TCTS.net
'春の七草の名前の中に「スズ」が入るのは'(_名前の中にスズが入る春の七草) :-
春の七草(_春の七草),
sub_atom(_春の七草,_,_,_,スズ),
_春の七草 = _名前の中にスズが入る春の七草.

% この方が良いという意見もある。私は >>128 で構わないと思いますが。

130 :デフォルトの名無しさん:2021/05/22(土) 10:57:31.66 ID:EzA/TCTS.net
Prologで項を読み込む時は read や read_term を使うけれど、syntax errorにならないように気を使わなくてはならず、さらに最後にピリオドが必要だったりであまり使われない。
SWI-Prologでは文の読み取りは read_line_to_string/2 が主に使われるようだ。

?- read_line_to_string(current_input,S).

とかやると、プロンプトが出てきて、入力可能になる。アルファベットと認識できる文字なら空白があろうとビリオドがあろうと全体がストリングとして読み取られる。

131 :デフォルトの名無しさん:2021/05/22(土) 11:35:44.08 ID:EzA/TCTS.net
さて、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.となる。

132 :デフォルトの名無しさん:2021/05/22(土) 11:43:12.26 ID:EzA/TCTS.net
もう少しやってみると

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

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

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

?-
name/2とは第二引数にStringと文字コードリストが入り得る仕様のようだ。
それではなぜ第一引数にアトムがくると文字コードリストが選択されるのか。
双方向性の述語の仕様として異様である。

133 :デフォルトの名無しさん:2021/05/22(土) 11:54:49.12 ID:EzA/TCTS.net
実際には、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を述語名に持ってくることはできない。

134 :デフォルトの名無しさん:2021/05/24(月) 13:39:16.27 ID:pTUv/8tK.net
>>133
?- read_line_to_string(current_input,S),string_to_atom(S,A),assertz(A).
のようにアトムに変換する述語を介すれば定義可能。

135 :デフォルトの名無しさん:2021/05/24(月) 14:45:39.55 ID:pTUv/8tK.net
SWI-Prologにはconsult/1とreconsult/1の区別がない。全部、reconsult/1となる。これによって間違いは少なくなるが、ここと言う時にまとめての節の追加assertzがし難い。このような仕様になっているのは、述語定義とそれが記述されているソースファイルを一対一に対応させたいからなのだろう。

136 :デフォルトの名無しさん:2021/05/28(金) 02:54:03.56 ID:c1aNJ6R+.net
別のスレで話題が出ていたPrologの小学校授業の実践例。
私は聞かないのだが、試みている方いますか?

137 :デフォルトの名無しさん:2021/05/28(金) 02:56:30.10 ID:c1aNJ6R+.net
>>136
5chでこの質問は無理かな。twitterで問いかけてみよう。

138 :デフォルトの名無しさん:2021/05/28(金) 03:08:05.89 ID:cfWnMWR2.net
Prologおじさんは真夜中に仕事!

139 :デフォルトの名無しさん:2021/06/01(火) 15:31:29.00 ID:IjgT90G7.net
>>5

いや、Prologは動的な型はあるぞ。
integer/1 で整数であるか調べたりもできる。
型がなかったら整数かどうかを調べることもできない。

140 :デフォルトの名無しさん:2021/06/01(火) 15:35:19.88 ID:IjgT90G7.net
>>59
TAPLみたいな型理論を理解するには述語論理を使えるPrologを使うと理解がしやすいと思うんだがな。
単一化もあるから型推論も簡単にかけるし。

141 :デフォルトの名無しさん:2021/06/01(火) 15:44:36.37 ID:IjgT90G7.net
>>130
定理証明支援系のCoqも.で終わったりします。
Coqで.を使う言語は言語を扱うメタな言語の方なので、
Prologと共通点があるのかもw

142 :デフォルトの名無しさん:2021/06/01(火) 19:28:43.26 ID:NMxDDUXJ.net
>>139
Prologで整数や数値が「型」かどうかとなると相当に怪しい。
単に計算対象になる整数。数値。そしてアトム。それだけ。
複合項のパターンを纏めるつもりが全くない言語で型があると言ってよいものだろうか。

143 :デフォルトの名無しさん:2021/06/02(水) 00:05:18.95 ID:PGTV1esh.net
Prologの規格にPrologと型という概念は相容れないという記述でもあるのか?
教えてくれ

144 :デフォルトの名無しさん:2021/06/02(水) 00:26:36.32 ID:webfWhef.net
さすがProlog!悪魔の証明もできちまうんだ

145 :デフォルトの名無しさん:2021/06/02(水) 00:48:25.45 ID:4mby1Q15.net
閉世界仮説だしね

146 :デフォルトの名無しさん:2021/06/02(水) 02:56:41.74 ID:BUsn5VkI.net
>>143
50数冊発行されている日本語のProlog書の中で、索引に型という項目が存在するのは3冊だけ
やはり単一化が相当に重いから、さらに型付をしたいとは思わないということでは

147 :デフォルトの名無しさん:2021/06/02(水) 08:33:49.33 ID:WwionR+x.net
>>146
型という概念はFORTRANの時代からあったわけだし、使ってもよかったはずだけれど
使わなかった。アトムだけで行きたかったけれど妥協して数値は作った。
論理変数に型付けなんて論外。要するにほんの少しでも決まり事を減らしたい。そういう世界。

148 :デフォルトの名無しさん:2021/06/02(水) 08:42:56.55 ID:BUsn5VkI.net
>>147
最初から確信を持ってそうなのだから、所謂ガルパゴス化ではないと

149 :デフォルトの名無しさん:2021/06/02(水) 12:47:50.87 ID:BUsn5VkI.net
述語論理とかHaskellがあがっていますが、
小6では述語論理やPrologでは遅すぎ。Haskellでは早すぎるのではないでしょうか。

150 :デフォルトの名無しさん:2021/06/02(水) 12:50:22.32 ID:BUsn5VkI.net
>>149
すみません。これ誤爆でした。

151 :デフォルトの名無しさん:2021/06/04(金) 09:27:00.93 ID:y0+/+oEy.net
「文字を覚えたときがPrologの覚えどき」
とは、言い得ると思うのですが、さて、この「文字を覚えたとき」を何時とみるか。
5才なのか、7才なのか、それとも・・・

152 :デフォルトの名無しさん:2021/06/04(金) 09:39:23.01 ID:W7exS3i6.net
>>151
個人差がある。幼稚園に入るために予備校に行ってる児童もいる。この場合は4才だって行けるだろうし。

153 :デフォルトの名無しさん:2021/06/04(金) 11:51:33.16 ID:y0+/+oEy.net
公立の小学校なら二年生から。そういう言い方をしないといけないのかな。

154 :デフォルトの名無しさん:2021/06/04(金) 23:56:12.37 ID:SHIs30ma.net
オーソドックスなPrologマスターが世間に露出してないのが日本Prolog界の不幸

155 :デフォルトの名無しさん:2021/06/05(土) 05:28:48.44 ID:WQBHghpu.net
わりと興味はあるが書店行っても大学の教材みたいな内容の本しかないのが辛い
CやJavaみたいな初心者向けの入門書(それでいてそれなりに深いとこまでやるゴツくて厚いやつ)欲しい
教材タイプのって数学の教科書みたいな、必要十分なこと書いてはい説明終わり、ここまでの内容でこの問題できるからなやっとけよ、で突き放されて分からないまま途方に暮れて終わる

156 :デフォルトの名無しさん:2021/06/05(土) 08:05:06.46 ID:st3XvE6E.net
>>155
適切な表現かどうかわからないが、Prologの『逆引き』本がほしい。
アプリのグループでまとめたもの。まとまった単位のソースが得られ
ればそれをヒントに作り替えたり、そこまでできなくても深く学ぶこ
とができる。

157 :デフォルトの名無しさん:2021/06/06(日) 19:15:04.37 ID:n4lTECsD.net
>>142
マーキュリーとか普通にHM型付けしてたりしてますよ。
型クラスもあるしw

integerはatomの部分型と考えることができますし。
numberもatomの部分型
string型もあるし、objectもありますよね。
動的型付けな言語は多かれ少なかれそう言った型システムに守られているので、型なしで未定義エラーで死んだりしません。

158 :sage:2021/06/06(日) 19:19:06.05 ID:n4lTECsD.net
>>149
Prolog を型理論を学習する前後で勉強すると良いのではと思う今日この頃です。
述語論理は普通のプログラマにとってとっつき辛いのでTAPLは難解だと言われている。
Prolog で一階述語論理を理解しておくと図が簡単に実装できるので便利w

159 :sage:2021/06/06(日) 19:27:41.20 ID:n4lTECsD.net
>> 152
日本語プログラミングとか、型理論とかは確かにオーソドックスじゃないのかもなぁ。
Prologの得意分野は非決定的な計算や言語を扱いやすい点にあるので、言語機能の実験にちょろっと使うのに便利w
だからプログラミング言語の論文で広く述語論理が使われてるのだと思う。

160 :sage:2021/06/06(日) 19:30:01.30 ID:n4lTECsD.net
Prologは文法を意識しないで日本語が話せるように使うことができるという意味で簡単だ。
しかし言語の文法を意識して研究する場合にも有用であるので、とっつきやすい人はとっつきやすいのだけど、文法がどうのって話になると途端に敷居が上がる言語だと思いますな。

161 :デフォルトの名無しさん:2021/06/10(木) 12:53:16.61 ID:gzqz1I/r.net
>>143
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を重視しない、そして
言語としてはこの問題に関わらない姿勢だけは読み取れます。

162 :デフォルトの名無しさん:2021/06/10(木) 23:11:29.64 ID:8rzcBiSm.net
んー.この註釈が型について語っていることはむしろ逆だろう.
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 をみて処理する(型がある)わけでしょう?

163 :デフォルトの名無しさん:2021/06/13(日) 16:17:57.28 ID:Mv2X7sgn.net
>>161
プログラミング言語を広く見た場合にPrologは動的型付け言語な言語なのだけど、
Prolog 文化としては動的型付け言語は型なし言語と標準を作る際でも呼んでいる。
標準化委員会の趣味や趣向、時代的な背景の違いによる用語選択の違いでしょう。

164 :デフォルトの名無しさん:2021/07/10(土) 06:42:49.52 ID:/fomt9eB.net
ツィート見たけどPrologおじさんまじか。

165 :デフォルトの名無しさん:2021/07/10(土) 07:22:38.57 ID:oQhiue2Q.net
悲しい
失われる前に知識のアーカイブ化を

166 :デフォルトの名無しさん:2021/07/10(土) 14:20:04.35 ID:hyh546Qk.net
@TakaoOzaki
肺癌進行
最短経路でpinpinころり
南無南無

167 :デフォルトの名無しさん:2021/12/26(日) 11:33:27.89 ID:5417YXm0.net
快方に向かっているようでよかった。

168 :デフォルトの名無しさん:2023/07/07(金) 23:08:08.10 ID:dbf8ktWh.net
その後どうだい?

47 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★