Prolog初心者のスレ
これは良い言語だ…
探検
【論理】Prolog【初心者】
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2010/11/06(土) 13:00:56109デフォルトの名無しさん
2011/01/01(土) 18:44:51 swi-Prologを使用しています。
listingでプログラムをセーブするとき、tell(出力先)を使うしかないのでしょうか?
listingでプログラムをセーブするとき、tell(出力先)を使うしかないのでしょうか?
110デフォルトの名無しさん
2011/01/01(土) 19:38:50 >>109
open/3,listing/2,close/1などが使えないものか、
ということですね。私はtell/1でしか使ったことが
ながったので、確かめてみました。
結論からいうと、ストリームの使用はできないようですね。
open/3,listing/2,close/1などが使えないものか、
ということですね。私はtell/1でしか使ったことが
ながったので、確かめてみました。
結論からいうと、ストリームの使用はできないようですね。
111デフォルトの名無しさん
2011/01/01(土) 23:19:30 迷路で全ての経路探索とか出来るのん?
112デフォルトの名無しさん
2011/01/02(日) 01:17:51 方程式を自動で解くことはできるのん?
113デフォルトの名無しさん
2011/01/02(日) 06:59:51 >>111
Prologでまったりスレでも何回となく示された述語先祖で考えてみます。
親子(為義,義朝).
親子(義朝,頼朝).
の関係が定義されている時、先祖関係は、
先祖(A,B) :- 親子(A,B).
先祖(A,B) :- 親子(A,C),先祖(C,B).
で定義できます。
これは 為義 --- 義朝 --- 頼朝 の関係ですが、
これを 為義 --- 義朝 --- 義平
|- 為朝 |- 頼朝 --- 範頼
と定義し直します。
親子(為義,義朝).
親子(為義,為朝).
親子(義朝,義平).
親子(義朝,頼朝).
親子(頼朝,範頼). ですね。先祖関係の定義もちょっとだけ手を入れて、
先祖(A,B) :- 親子(A,B),write_formatted('%t-%t\n',[A,B]),!.
先祖(A,B) :- 親子(A,C),write_formatted('%t-%t\n',[A,C]),先祖(C,B). ここで、
?- 先祖(為義,範頼). を実行してみます。
為義-義朝
義朝-義平
義朝-頼朝
頼朝-範頼
yes で終了となります。あとで続きを書きます。
Prologでまったりスレでも何回となく示された述語先祖で考えてみます。
親子(為義,義朝).
親子(義朝,頼朝).
の関係が定義されている時、先祖関係は、
先祖(A,B) :- 親子(A,B).
先祖(A,B) :- 親子(A,C),先祖(C,B).
で定義できます。
これは 為義 --- 義朝 --- 頼朝 の関係ですが、
これを 為義 --- 義朝 --- 義平
|- 為朝 |- 頼朝 --- 範頼
と定義し直します。
親子(為義,義朝).
親子(為義,為朝).
親子(義朝,義平).
親子(義朝,頼朝).
親子(頼朝,範頼). ですね。先祖関係の定義もちょっとだけ手を入れて、
先祖(A,B) :- 親子(A,B),write_formatted('%t-%t\n',[A,B]),!.
先祖(A,B) :- 親子(A,C),write_formatted('%t-%t\n',[A,C]),先祖(C,B). ここで、
?- 先祖(為義,範頼). を実行してみます。
為義-義朝
義朝-義平
義朝-頼朝
頼朝-範頼
yes で終了となります。あとで続きを書きます。
114デフォルトの名無しさん
2011/01/02(日) 07:04:12 系図が歪んでしまいました。書き直し。
これは 為義 --- 義朝 --- 頼朝 の関係ですが、
これを 為義 --- 義朝 --- 義平
|- 為朝 |- 頼朝 --- 範頼
これは 為義 --- 義朝 --- 頼朝 の関係ですが、
これを 為義 --- 義朝 --- 義平
|- 為朝 |- 頼朝 --- 範頼
115デフォルトの名無しさん
2011/01/02(日) 07:15:36 >>113
で示した親子関係が迷路の回路選択を抽象したものになっていると思います。
分岐点(例えば為義)から開路である義朝に進むか、為朝に進むかの選択があります。
Prologは深さ優先選択という戦術で、次に義朝-義平の順で進んで行きます。
義平には子はいないようなので、諦めて、義朝分岐点に戻り、頼朝を選択する。
こうして、範頼にたどり着きます。
で示した親子関係が迷路の回路選択を抽象したものになっていると思います。
分岐点(例えば為義)から開路である義朝に進むか、為朝に進むかの選択があります。
Prologは深さ優先選択という戦術で、次に義朝-義平の順で進んで行きます。
義平には子はいないようなので、諦めて、義朝分岐点に戻り、頼朝を選択する。
こうして、範頼にたどり着きます。
116デフォルトの名無しさん
2011/01/02(日) 07:18:02 最後に強調されるべきことは、この経路選択
プログラムが
先祖(A,B) :- 親子(A,B).
先祖(A,B) :- 親子(A,C),先祖(C,B).
という極めて簡素な定義によって書き切られていると
いう点です。
プログラムが
先祖(A,B) :- 親子(A,B).
先祖(A,B) :- 親子(A,C),先祖(C,B).
という極めて簡素な定義によって書き切られていると
いう点です。
117デフォルトの名無しさん
2011/01/02(日) 14:24:42 AZ-Prologの64bit版は、6Gbyte以上のメモリーを推奨していますが、SW-Prologの64bit版は、どうなんでしょうか?
4Gbyteだと、問題があるでしょうか?
4Gbyteだと、問題があるでしょうか?
118デフォルトの名無しさん
2011/01/02(日) 14:44:59 >>117
SWI-Prologの64bit版は使ったことがないので、
これは回答ではありません。
AZ-Prologの64bit版についてですが、これは新しい
版がマルチコア対応の並列処理機能を目玉にして
いるため、必ずこの機能が使われるに相違ないとして、
保険をかけた感じで、大きなメモリーを推奨しているに
過ぎないと思います。小さいと動かなくなる理由はない
はずです。
SWI-Prologの64bit版は使ったことがないので、
これは回答ではありません。
AZ-Prologの64bit版についてですが、これは新しい
版がマルチコア対応の並列処理機能を目玉にして
いるため、必ずこの機能が使われるに相違ないとして、
保険をかけた感じで、大きなメモリーを推奨しているに
過ぎないと思います。小さいと動かなくなる理由はない
はずです。
119デフォルトの名無しさん
2011/01/02(日) 14:57:01 >>112
これに答えるのは私の能力を超えるので簡単に。
現在のPrologの仕様で引数の評価に大きな力を持た
せることは、ユニフィケーションが邪魔をして無理です。
さらに、現在のPrologの基本的に持っている能力は
変数の変域が離散的でごく限られた数である場合に、
虱潰しに変数に候補要素をあてはめて、確かめること
だけだと思います。変数制約を解消していくどんな機構も
持っていません。これを解決するには、この目的のために、
開発された、制約論理型プログラム言語を利用する他ない
のではないでしょうか。
多くの制約論理型言語はそのサブセットとして、Prologを
持っていますから、そういう利用が多いユーザは最初から
制約論理型言語を選択するべきでしょう。
これに答えるのは私の能力を超えるので簡単に。
現在のPrologの仕様で引数の評価に大きな力を持た
せることは、ユニフィケーションが邪魔をして無理です。
さらに、現在のPrologの基本的に持っている能力は
変数の変域が離散的でごく限られた数である場合に、
虱潰しに変数に候補要素をあてはめて、確かめること
だけだと思います。変数制約を解消していくどんな機構も
持っていません。これを解決するには、この目的のために、
開発された、制約論理型プログラム言語を利用する他ない
のではないでしょうか。
多くの制約論理型言語はそのサブセットとして、Prologを
持っていますから、そういう利用が多いユーザは最初から
制約論理型言語を選択するべきでしょう。
120デフォルトの名無しさん
2011/01/02(日) 23:44:13 おお説明来てる
が、むずい
勉強しよう
が、むずい
勉強しよう
121デフォルトの名無しさん
2011/01/03(月) 02:58:48 >>119
詳しい解説があったのでリンクします。
制約論理プログラミング
http://ja.wikipedia.org/wiki/%E5%88%B6%E7%B4%84%E8%AB%96%E7%90%86%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
制約プログラミングのページ
http://www.constraint.org/constraint_org.htm
詳しい解説があったのでリンクします。
制約論理プログラミング
http://ja.wikipedia.org/wiki/%E5%88%B6%E7%B4%84%E8%AB%96%E7%90%86%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
制約プログラミングのページ
http://www.constraint.org/constraint_org.htm
122デフォルトの名無しさん
2011/01/07(金) 09:21:23 Prologの入門本の学習順序の提案
杉崎昭生著「Prologを学ぶ」(http://www.amazon.co.jp/dp/4303716901/)
->
古川康一著「Prolog入門」(http://www.amazon.co.jp/dp/4274073084/)
杉崎昭生著「Prologを学ぶ」(http://www.amazon.co.jp/dp/4303716901/)
->
古川康一著「Prolog入門」(http://www.amazon.co.jp/dp/4274073084/)
123デフォルトの名無しさん
2011/01/08(土) 00:35:13 素人ですが、事例を検索するプログラムを考えています。
例えですが、文字列と、それを含むページについて考えます。
記号aを、この文字列として表すときは"a"とし、変数とするときはそのまま裸のaで表すことにします。
あいまいな表現になりますが、「aを含むページである」というのをPg(a)と表すと、
「Pg(a) ならば Pg(b)」 というのは、「aを含むページなら、bを含むページである」ということになります。
この式の値として、式を変形し、「¬(Pg(a)) または Pg(b)」 とし、aを含まないページの集合とbを含むページの集合の和集合を求め、そのページ数を全ページ数で割った値とします。この式の否定の値は、1との差の値になります。
式の値をこのようにするのは数学的に妥当なものなのでしょうか?
例えですが、文字列と、それを含むページについて考えます。
記号aを、この文字列として表すときは"a"とし、変数とするときはそのまま裸のaで表すことにします。
あいまいな表現になりますが、「aを含むページである」というのをPg(a)と表すと、
「Pg(a) ならば Pg(b)」 というのは、「aを含むページなら、bを含むページである」ということになります。
この式の値として、式を変形し、「¬(Pg(a)) または Pg(b)」 とし、aを含まないページの集合とbを含むページの集合の和集合を求め、そのページ数を全ページ数で割った値とします。この式の否定の値は、1との差の値になります。
式の値をこのようにするのは数学的に妥当なものなのでしょうか?
124デフォルトの名無しさん
2011/01/08(土) 05:15:34 >>123
「全ページのうち、命題を否定しないページと否定するページの割合」を計算しています。
数学的に妥当でない操作は行われていません。
でもaを含まないページは事例検索の利用者にとって無関係な事例でしょう。
必要なのは「aを含むページのうち、bを含むページと含まないページの割合」なのでは?
「全ページのうち、命題を否定しないページと否定するページの割合」を計算しています。
数学的に妥当でない操作は行われていません。
でもaを含まないページは事例検索の利用者にとって無関係な事例でしょう。
必要なのは「aを含むページのうち、bを含むページと含まないページの割合」なのでは?
125デフォルトの名無しさん
2011/01/08(土) 08:34:44 >>123
Pg(a) を太宰治が現れるページ Pg(b) を文学という語が
現れるページとすると、
「この式の値として、式を変形し、「\+(Pg(a)) または Pg(b)」
とし、aを含まないページの集合とbを含むページの集合の
和集合を求め、そのページ数を全ページ数で割った値」とは
(全ページ数 + 太宰治という語が現れないが文学という語の現れるページ数) / 全ページ数
ですね。この比率 - 1 は
( Pg(a),\+(Pg(b))のページ数 / 全ページ数 ではなくて
( \+Pg(a),pg(b))のページ数 / 全ページ数 なのではないか。
Pg(a) を太宰治が現れるページ Pg(b) を文学という語が
現れるページとすると、
「この式の値として、式を変形し、「\+(Pg(a)) または Pg(b)」
とし、aを含まないページの集合とbを含むページの集合の
和集合を求め、そのページ数を全ページ数で割った値」とは
(全ページ数 + 太宰治という語が現れないが文学という語の現れるページ数) / 全ページ数
ですね。この比率 - 1 は
( Pg(a),\+(Pg(b))のページ数 / 全ページ数 ではなくて
( \+Pg(a),pg(b))のページ数 / 全ページ数 なのではないか。
126124
2011/01/08(土) 10:00:12 >>125
A=太宰治がなく文学がないページ
B=太宰治があり文学がないページ
C=太宰治がなく文学があるページ
D=太宰治があり文学があるページ
とおくと、
全ページ = A+B+C+D
¬(Pg(a)) = A+C
Pg(b) = C+D
¬(Pg(a)) または Pg(b) = A+C+D
になります。
「aを含まないページの集合とbを含むページの集合の
和集合を求め、そのページ数を全ページ数で割った値」は
(A+C+D) / (A+B+C+D) です。
全ページのうち、「太宰治を含むなら文学を含む」を否定しないページの割合です。
これは1以下になります。この割合-1は無意味です。
1-この割合は B / (A+B+C+D) です。
全ページのうち、「太宰治を含むなら文学を含む」を否定するページの割合です。
>>123
事例検索の利用者にとっては太宰治を含まないページはどうでもいいから
役に立つのは「太宰治を含むページのうち、文学をを含むページの割合」と
「太宰治を含むページのうち、文学を含まないページの割合」ではないでしょうか。
A=太宰治がなく文学がないページ
B=太宰治があり文学がないページ
C=太宰治がなく文学があるページ
D=太宰治があり文学があるページ
とおくと、
全ページ = A+B+C+D
¬(Pg(a)) = A+C
Pg(b) = C+D
¬(Pg(a)) または Pg(b) = A+C+D
になります。
「aを含まないページの集合とbを含むページの集合の
和集合を求め、そのページ数を全ページ数で割った値」は
(A+C+D) / (A+B+C+D) です。
全ページのうち、「太宰治を含むなら文学を含む」を否定しないページの割合です。
これは1以下になります。この割合-1は無意味です。
1-この割合は B / (A+B+C+D) です。
全ページのうち、「太宰治を含むなら文学を含む」を否定するページの割合です。
>>123
事例検索の利用者にとっては太宰治を含まないページはどうでもいいから
役に立つのは「太宰治を含むページのうち、文学をを含むページの割合」と
「太宰治を含むページのうち、文学を含まないページの割合」ではないでしょうか。
127125
2011/01/08(土) 10:12:56 確かにそうですね。ありがとう。
128デフォルトの名無しさん
2011/01/08(土) 10:14:57129デフォルトの名無しさん
2011/01/08(土) 10:53:31 「Prologの宿題片付けます」スレで出ている、Prologの
解説本の中に8クィーンアルゴリズムは何種類くらい
あるかな、という話は現在まとめ中です。あまり、この
言語向きの課題とは思えないけど。
この言語向きの課題といえば、20年くらい前にProlog
を買っていた時、本屋の立ち読みの評価基準に使って
いたのが、経路問題の多寡。もちろん多いほど読み応え
がある。この基準でどんな本を復活できるかやってみま
しょう。
解説本の中に8クィーンアルゴリズムは何種類くらい
あるかな、という話は現在まとめ中です。あまり、この
言語向きの課題とは思えないけど。
この言語向きの課題といえば、20年くらい前にProlog
を買っていた時、本屋の立ち読みの評価基準に使って
いたのが、経路問題の多寡。もちろん多いほど読み応え
がある。この基準でどんな本を復活できるかやってみま
しょう。
130デフォルトの名無しさん
2011/01/08(土) 11:08:44 どんな本を復活できるか、とは妙な言い回しですが、
もう五年以上前になりますが、本棚に眠っていた、
「Prologを学ぶ --文化とその実践--」という本を
読んでみて、気に入ったというよりよく書けているのに
感心した。Amazonで確認してみるとほとんど売れ行き
は最下位近くに低迷していた。そこで、読み直したら
赤面ものの内容のないカスタマーレビューを書き、
星五つの評価を付けた。驚くべきことに、それ以降、
この無名本は常時Prolog本の売れ行き上位に入り続け
今日でも絶版にもならず、Amazonでは売り切れては
入荷をくり返している。こんなことで、忘れ去られた本
たちが復活できるなら、いくらでも労は惜しみません。
もう五年以上前になりますが、本棚に眠っていた、
「Prologを学ぶ --文化とその実践--」という本を
読んでみて、気に入ったというよりよく書けているのに
感心した。Amazonで確認してみるとほとんど売れ行き
は最下位近くに低迷していた。そこで、読み直したら
赤面ものの内容のないカスタマーレビューを書き、
星五つの評価を付けた。驚くべきことに、それ以降、
この無名本は常時Prolog本の売れ行き上位に入り続け
今日でも絶版にもならず、Amazonでは売り切れては
入荷をくり返している。こんなことで、忘れ去られた本
たちが復活できるなら、いくらでも労は惜しみません。
131123
2011/01/08(土) 12:30:04 経験の事例を単純に選言標準形で表したプログラムを考えていますが、
その世界での論理値を0から1までの値にして数学的な破綻がないかどうかが気になっていました。
意味のある検索とか、推論とかも、比の論理値で色々考えてみるつもりです。
その世界での論理値を0から1までの値にして数学的な破綻がないかどうかが気になっていました。
意味のある検索とか、推論とかも、比の論理値で色々考えてみるつもりです。
132デフォルトの名無しさん
2011/01/08(土) 13:02:44 ファジィ論理?
134デフォルトの名無しさん
2011/01/09(日) 08:49:36 手続きを書くのではなくて、
ぷろろぐに手続きを任せるって認識でいいのだろうかー
PGは関係を定義しておくだけという
で、がらがらと処理して真か偽かと
ぷろろぐに手続きを任せるって認識でいいのだろうかー
PGは関係を定義しておくだけという
で、がらがらと処理して真か偽かと
135デフォルトの名無しさん
2011/01/09(日) 10:45:34 2ch ヘッドラインニュースBBY(一覧性が秀逸)http://headline.2ch.net/bbynews/
どんな難解ニュースでも掲示板の書き込みでオモシロおかしく簡単理解。
ニュースを勢い順にカテゴリー別で表示する"2NN"(2ちゃんねるニュース速報+ナビゲーター)もどうぞ。
どんな難解ニュースでも掲示板の書き込みでオモシロおかしく簡単理解。
ニュースを勢い順にカテゴリー別で表示する"2NN"(2ちゃんねるニュース速報+ナビゲーター)もどうぞ。
136デフォルトの名無しさん
2011/01/11(火) 18:07:30 >>134
Prologはプログラムには確実に実行順序があります。
この実行順序を"意識"すると手続きになり、意識しない限りは
宣言的である(宣言的に読んでいる)といえます。
Prologの副目標(subgoalともいう)は真偽値しか返しません。これが
Prologプログラミングの核心であって、プログラマは、実際には、
全部真であるに違いないという姿勢でこの本体の記述を読みます。
つまり真偽値さへも意識しないのです。そして引数の変数の遷移を
一瞥します。
Prologを読むときにすることはこれだけです。そう、これだけです。
返り値のこともあるいはそのデータ型やクラスについて思いめぐら
すことは全く、ありません。
Prologはプログラムには確実に実行順序があります。
この実行順序を"意識"すると手続きになり、意識しない限りは
宣言的である(宣言的に読んでいる)といえます。
Prologの副目標(subgoalともいう)は真偽値しか返しません。これが
Prologプログラミングの核心であって、プログラマは、実際には、
全部真であるに違いないという姿勢でこの本体の記述を読みます。
つまり真偽値さへも意識しないのです。そして引数の変数の遷移を
一瞥します。
Prologを読むときにすることはこれだけです。そう、これだけです。
返り値のこともあるいはそのデータ型やクラスについて思いめぐら
すことは全く、ありません。
137デフォルトの名無しさん
2011/01/12(水) 23:53:14 ふm
肝はデータベースと見た
肝はデータベースと見た
138デフォルトの名無しさん
2011/01/13(木) 05:25:54139デフォルトの名無しさん
2011/01/14(金) 12:45:05 別解を求めていくためにカットを使わないところがあると、別解を求めていくとき、
節を選択する条件を兼ねた命題が失敗して次の節が選ばれればいいのですが、失敗でないのに次の節に移るときがあります。
そのために、条件の否定を加える必要があるのですが、
一般的に、カットを使わないときは、カットによって省略できていた命題を加えればいいということなのでしょうか?
節を選択する条件を兼ねた命題が失敗して次の節が選ばれればいいのですが、失敗でないのに次の節に移るときがあります。
そのために、条件の否定を加える必要があるのですが、
一般的に、カットを使わないときは、カットによって省略できていた命題を加えればいいということなのでしょうか?
140デフォルトの名無しさん
2011/01/14(金) 16:24:02 >>139
必要なことは、a,bが条件だとすると、
p(X) :- a,b,X=1.
p(X) :- a,\+(b),X=2.
p(X) :- \+(a),b,X=3.
p(X) :- \+(a),\+(b),X=4.
のような定義を「気楽」にできること。
実際には、a,b,の中に副作用があったりして
このような記述が不可能の場合もありますが。
我慢して、このような冗長なコードを書いて
いると、ご利益として、ブール代数的直感が
鋭くなってきていつの間にか以前よりも正確
なコード書くことができるようになります。
必要なことは、a,bが条件だとすると、
p(X) :- a,b,X=1.
p(X) :- a,\+(b),X=2.
p(X) :- \+(a),b,X=3.
p(X) :- \+(a),\+(b),X=4.
のような定義を「気楽」にできること。
実際には、a,b,の中に副作用があったりして
このような記述が不可能の場合もありますが。
我慢して、このような冗長なコードを書いて
いると、ご利益として、ブール代数的直感が
鋭くなってきていつの間にか以前よりも正確
なコード書くことができるようになります。
141デフォルトの名無しさん
2011/01/15(土) 22:48:50 問題 3つの整数があります。AとBとCの和が160,Aの2倍とBの3倍とCの和が297,Bの2倍とCの和が149で
す。Bはいくつですか。
'Bはいくつですか'(N) :-
length(D,160),
append(A,B,C,D),
length(E,297),
append(A,A,A2),
append(B,B,B,B3),
append(A2,B3,C,E),
length(F,149),
append(B,B,C,F),
length(B,N).
?- 'Bはいくつですか'(N).
N = 42
の解がでるまでにIF/Prologインタプリタで
6分30秒かかった。
す。Bはいくつですか。
'Bはいくつですか'(N) :-
length(D,160),
append(A,B,C,D),
length(E,297),
append(A,A,A2),
append(B,B,B,B3),
append(A2,B3,C,E),
length(F,149),
append(B,B,C,F),
length(B,N).
?- 'Bはいくつですか'(N).
N = 42
の解がでるまでにIF/Prologインタプリタで
6分30秒かかった。
142141
2011/01/19(水) 08:31:21 間違い。2.2GhzCPU Ubuntu10.10で242秒でした。
143デフォルトの名無しさん
2011/01/21(金) 13:07:46 ['X']というアトムのリストを、[X]という変数のリストにするにはどうすればいいのでしょうか?
144143
2011/01/21(金) 14:59:50 一応、外部にリストの形の文字列を出力してから、入力しています。
145デフォルトの名無しさん
2011/01/24(月) 06:45:38 >>143
どういう局面で変数ラベルがプログラマの期待通り
表示されるのかという問題と考えよう。
処理系によって異なるとおもうけれど、Heap領域に
元々の変数のラベルと現在の変数の一意名(大きの
場合番号)の対応表が確保される。この対応表が
Prologの処理系によって参照されるのは、
・listingなど定義節の表示(これは否応なくHeap
領域の参照が生じる。そのついで)
・インタプリタのトップレベルのインタプリタ側が
サービスとして表示する変数名。
であって、
?- atom_to_term('X',A,Varlist),write(A),nl.
を実行しても、
このトップレベルには変数Xが存在しないため、
_G24689
A = _G24689
yes としか表示されない。
つまり、トップレベルに現れる変数は例外として、
反駁途中stack領域内でのユニフィケーションに
よって生じた当然の変数名は処理系がプログラマ
がこの変数名に何を期待しているかというような
推論を行わなわず、したがって、スタック内の
変数ラベルをこれに置き換えるというようなコスト
のかかる作業を行わないため表示されることがない。
あとで続きを書きます。
どういう局面で変数ラベルがプログラマの期待通り
表示されるのかという問題と考えよう。
処理系によって異なるとおもうけれど、Heap領域に
元々の変数のラベルと現在の変数の一意名(大きの
場合番号)の対応表が確保される。この対応表が
Prologの処理系によって参照されるのは、
・listingなど定義節の表示(これは否応なくHeap
領域の参照が生じる。そのついで)
・インタプリタのトップレベルのインタプリタ側が
サービスとして表示する変数名。
であって、
?- atom_to_term('X',A,Varlist),write(A),nl.
を実行しても、
このトップレベルには変数Xが存在しないため、
_G24689
A = _G24689
yes としか表示されない。
つまり、トップレベルに現れる変数は例外として、
反駁途中stack領域内でのユニフィケーションに
よって生じた当然の変数名は処理系がプログラマ
がこの変数名に何を期待しているかというような
推論を行わなわず、したがって、スタック内の
変数ラベルをこれに置き換えるというようなコスト
のかかる作業を行わないため表示されることがない。
あとで続きを書きます。
146自己レス
2011/01/24(月) 07:05:00 >>145
ごめんなさい。まちがえました。
?- atom_to_term('X',U,Varlist),write(U),nl. を実行すると、
_G24689
Varlist = ['X' = U]
となります。注目はwriteで表示される変数はUでもXでもなく、
_G24689であるという点です。
ごめんなさい。まちがえました。
?- atom_to_term('X',U,Varlist),write(U),nl. を実行すると、
_G24689
Varlist = ['X' = U]
となります。注目はwriteで表示される変数はUでもXでもなく、
_G24689であるという点です。
147デフォルトの名無しさん
2011/01/24(月) 11:43:29 consult/1やreconsult/1でファイルからソースプログラムを
読み込むときは、読み込んだ文字列をparse_atomして、第三
引数のVarlistをヒープ領域に、変数名と定義した節構造の
中の変数Idのペア、として登録します。
ユーザがreadしてからassertする場合は、処理系によります。
assertz_with_namesのようなVarlist処理をオプションに
持った処理系の場合は,
?- ... read_with_names(P,V),assertz_with_name(P,V), ...
としておくことで、後にユーザが指定したかった変数名を
あくまで字面だけの問題ではありますが、「復元」するこ
とができます。
このようなオプションがあれば、より高度なインタプリタを
構築したり、マクロ処理を取り入れる場合には、この復元
を使うことによって、使い易い、分かりやすい、インタブリタ
やデバッガを作成することができます。
しかし、これらのことはあくまで変数を表示する際の「字面」
だけの問題であり、Prolog実行時のユニフィケーションに
よる、スタックの書き換え処理では、そのすべてが無機的な
変数Idの単一化だけで処理されている、ということを理解
する必要があります。
読み込むときは、読み込んだ文字列をparse_atomして、第三
引数のVarlistをヒープ領域に、変数名と定義した節構造の
中の変数Idのペア、として登録します。
ユーザがreadしてからassertする場合は、処理系によります。
assertz_with_namesのようなVarlist処理をオプションに
持った処理系の場合は,
?- ... read_with_names(P,V),assertz_with_name(P,V), ...
としておくことで、後にユーザが指定したかった変数名を
あくまで字面だけの問題ではありますが、「復元」するこ
とができます。
このようなオプションがあれば、より高度なインタプリタを
構築したり、マクロ処理を取り入れる場合には、この復元
を使うことによって、使い易い、分かりやすい、インタブリタ
やデバッガを作成することができます。
しかし、これらのことはあくまで変数を表示する際の「字面」
だけの問題であり、Prolog実行時のユニフィケーションに
よる、スタックの書き換え処理では、そのすべてが無機的な
変数Idの単一化だけで処理されている、ということを理解
する必要があります。
148143
2011/01/24(月) 22:53:06 >>147
質問が不適切だったと思います。
一般的に言うと、文字列として表現した節を、プログラムとしての節に変換するにはどうすればいいかということです。
外部のテキストをプログラムとして読み込めるなら、内部で「']と「']で囲まれた文字列をプログラムとして読み込めてもいいと思います。
質問が不適切だったと思います。
一般的に言うと、文字列として表現した節を、プログラムとしての節に変換するにはどうすればいいかということです。
外部のテキストをプログラムとして読み込めるなら、内部で「']と「']で囲まれた文字列をプログラムとして読み込めてもいいと思います。
149148
2011/01/24(月) 23:10:15 atom_to_termという述語を使えばいいと分かりました。
まったくの素人レベルのことです。
まったくの素人レベルのことです。
150デフォルトの名無しさん
2011/01/25(火) 18:57:10151デフォルトの名無しさん
2011/03/03(木) 19:28:07.67 あげるべきだろう
152デフォルトの名無しさん
2011/03/08(火) 07:50:13.35 http://nojiriko.asia/prolog/mojiretsu.pro
このサイトの後半部分は正規表現で書くことが
できるものをProlog述語で定義するとどうなるかと
いう課題への解答が集められています。
やはり、正規表現では1行で済むところが述語定義
では7-8行、場合によると10行以上になる場合も
少なくありません。しかし、ここで私が問いかけたいのは、
記述の効率性の問題だけではなく、これらの述語の名前と
して、正規表現として正解の表現を置いたとすると、この
述語名の解説としてPrologコードがどの程度有効な
ものになっているか、と言う観点です。(注1)
この観点からは、Prologは相当に優秀な言語だといえる
のではないか。そうであるといいなと思っています。
(注1) 残念ながら、正規表現の正解が元サイトでも
今ひとつはっきりしないため、述語名は日本語での
表現になっています。
このサイトの後半部分は正規表現で書くことが
できるものをProlog述語で定義するとどうなるかと
いう課題への解答が集められています。
やはり、正規表現では1行で済むところが述語定義
では7-8行、場合によると10行以上になる場合も
少なくありません。しかし、ここで私が問いかけたいのは、
記述の効率性の問題だけではなく、これらの述語の名前と
して、正規表現として正解の表現を置いたとすると、この
述語名の解説としてPrologコードがどの程度有効な
ものになっているか、と言う観点です。(注1)
この観点からは、Prologは相当に優秀な言語だといえる
のではないか。そうであるといいなと思っています。
(注1) 残念ながら、正規表現の正解が元サイトでも
今ひとつはっきりしないため、述語名は日本語での
表現になっています。
153デフォルトの名無しさん
2011/03/08(火) 20:45:35.91 同じサイトのこちらでは、
http://nojiriko.asia/prolog/onmemory_database.html
Prolog単位節をオンメモリデータベースに見立てて、
SQLによる問い合わせと等価なProlog述語定義を
試みています。
http://nojiriko.asia/prolog/onmemory_database.html
Prolog単位節をオンメモリデータベースに見立てて、
SQLによる問い合わせと等価なProlog述語定義を
試みています。
154デフォルトの名無しさん
2011/03/08(火) 21:29:14.81155デフォルトの名無しさん
2011/03/13(日) 04:44:42.40 「いろんな言語で宿題スレ」での出題に
対するProlog解答を集めたWebサイト
http://nojiriko.asia/prolog/
は現在1600解答を集めました。
先週、主要述語の用例集をこのサイトに集めた
解答から抜き出して追加しました。
各用例の題材は現在は出現順にならんで
いますが、今後のこれを意味別に並べ直すつもりです。
解説も極く一部しかついていませんが、意味別に
大分して、それに対して解説を追加する予定です。
最終的には、さらに主要Prolog処理系の互換性を
取るための述語などをここにします。
対するProlog解答を集めたWebサイト
http://nojiriko.asia/prolog/
は現在1600解答を集めました。
先週、主要述語の用例集をこのサイトに集めた
解答から抜き出して追加しました。
各用例の題材は現在は出現順にならんで
いますが、今後のこれを意味別に並べ直すつもりです。
解説も極く一部しかついていませんが、意味別に
大分して、それに対して解説を追加する予定です。
最終的には、さらに主要Prolog処理系の互換性を
取るための述語などをここにします。
156155
2011/03/13(日) 04:46:48.84 訂正 最終行 ここにします。 -> ここに追加します。
157デフォルトの名無しさん
2011/04/17(日) 09:16:01.11 x-euc-jpはeuc-jpにして欲しい…
158デフォルトの名無しさん
2011/04/23(土) 15:05:55.54 エキスパートシステムとか書けたりする?
159デフォルトの名無しさん
2011/04/23(土) 17:33:12.15 >>158
Prologはエキスパートシステム記述するための
言語のひとつということになっている。
私が書いたことがあるか、とか、今書けるかという意味だと
すると、答えは、
20年前には結構書いた。業務用も含めて。
対象が定まれば、サンプル的な短いものなら今でも書ける。
大別して前向き推論によるものと後ろ向き推論のものが
あるが、私は全て後ろ向き。
Prologにとってはこちらの方が自然ということらしい。
Prologはエキスパートシステム記述するための
言語のひとつということになっている。
私が書いたことがあるか、とか、今書けるかという意味だと
すると、答えは、
20年前には結構書いた。業務用も含めて。
対象が定まれば、サンプル的な短いものなら今でも書ける。
大別して前向き推論によるものと後ろ向き推論のものが
あるが、私は全て後ろ向き。
Prologにとってはこちらの方が自然ということらしい。
160デフォルトの名無しさん
2011/04/25(月) 23:18:32.73 エキスパートシステム書けるのですか。
…冷静に考えればprologなればこそ書けなきゃおかしいか。
IBMがprologで自然言語処理がうんたらかんたらしてるらしいので
もっと注目されてほしいなぁ。
…冷静に考えればprologなればこそ書けなきゃおかしいか。
IBMがprologで自然言語処理がうんたらかんたらしてるらしいので
もっと注目されてほしいなぁ。
161デフォルトの名無しさん
2011/04/27(水) 18:00:50.94 >>160
急に注目されはじめたようですよ。
急に注目されはじめたようですよ。
162デフォルトの名無しさん
2011/04/27(水) 19:57:36.82 エキスパートシステムなんてどんな言語でも簡単に書ける。
prologはファクトの無限導出を副作用をつかって
避ける必要があるので、むしろ面倒なくらいだ。
prologはファクトの無限導出を副作用をつかって
避ける必要があるので、むしろ面倒なくらいだ。
163デフォルトの名無しさん
2011/04/27(水) 20:58:39.35 >>162
「どんな言語でも」書けるもんなら書いてくれ。
「どんな言語でも」書けるもんなら書いてくれ。
164デフォルトの名無しさん
2011/04/28(木) 11:32:17.24 どんな言語でもというと語弊があるだろうけど、そんなに難しいものでは
ないという点には同意。
Prologだとappendだけで書けるレベル。かってはスタックオーバーフローや
GCの頻発に悩みながらだったが、現在は、2GB以上のプロセスが当たり前で
データをすべて引数で持ち回っても問題はない。
Prologの利点は、何といっても作り込みが容易なこと。業種、企業、生産現場に
よって、全く異なるデータのサンプリングの方法を仕様がしっかり文章化されて
いれば、簡単に述語として追加・変更できることだろう。
ないという点には同意。
Prologだとappendだけで書けるレベル。かってはスタックオーバーフローや
GCの頻発に悩みながらだったが、現在は、2GB以上のプロセスが当たり前で
データをすべて引数で持ち回っても問題はない。
Prologの利点は、何といっても作り込みが容易なこと。業種、企業、生産現場に
よって、全く異なるデータのサンプリングの方法を仕様がしっかり文章化されて
いれば、簡単に述語として追加・変更できることだろう。
165デフォルトの名無しさん
2011/04/28(木) 11:50:39.82 最近のエキスパートシステム事情には疎いのだけれど、
かっては確かにルールをシンボル化してその論理式を
assert,retractしながら利用するというような手法が
使われていたと思うけど、今は、
非決定性のappend/3 を ...,apppend(L1,[A|L2],L),filter(A,B), ...
のように使って、例えば、Bの排他的要素がL1,L2に存在
するか確かめながら(これもappend/3)進むというような
ものがほとんどだと思う。
かっては確かにルールをシンボル化してその論理式を
assert,retractしながら利用するというような手法が
使われていたと思うけど、今は、
非決定性のappend/3 を ...,apppend(L1,[A|L2],L),filter(A,B), ...
のように使って、例えば、Bの排他的要素がL1,L2に存在
するか確かめながら(これもappend/3)進むというような
ものがほとんどだと思う。
166デフォルトの名無しさん
2011/04/28(木) 23:29:22.17 >>164
私が今書くとすると、"Prolog Programming For Artificial Inteligence" の14章を
一度読みなおしてからということになるが、十分に難しいよ。
他の言語でやさしいかどうかは知らないが。
私が今書くとすると、"Prolog Programming For Artificial Inteligence" の14章を
一度読みなおしてからということになるが、十分に難しいよ。
他の言語でやさしいかどうかは知らないが。
167デフォルトの名無しさん
2011/04/29(金) 00:45:50.54 Prolog全然使えん。簡単なループ文書くのですら一苦労だ。
168デフォルトの名無しさん
2011/04/29(金) 12:35:51.70 斬新な用途ですね。
169デフォルトの名無しさん
2011/04/29(金) 21:02:38.40 prologが得意な人は行列積とかどんな風に書くのかな
自分で書くと、とても綺麗とはいえないコードになる
自分で書くと、とても綺麗とはいえないコードになる
170デフォルトの名無しさん
2011/04/29(金) 22:04:54.18 線形代数関係は、LAPACKに処理を投げるのがプログラミングの定石では?
PrologからLAPACKにどうやって処理を投げるのか知らないけど。
PrologからLAPACKにどうやって処理を投げるのか知らないけど。
171デフォルトの名無しさん
2011/04/29(金) 22:13:50.07 実用にするならそうだね。
ただ、言語のプログラミングスタイルの話だから…
ただ、言語のプログラミングスタイルの話だから…
172デフォルトの名無しさん
2011/04/30(土) 10:38:28.54173デフォルトの名無しさん
2011/04/30(土) 11:22:20.41 >>172
私が今書くとすると、"Matrix Computations 3rd Edition"を
一度読みなおしてからということになるが、十分に難しいよ。
他の言語でやさしいかどうかは知らないが。
私が今書くとすると、"Matrix Computations 3rd Edition"を
一度読みなおしてからということになるが、十分に難しいよ。
他の言語でやさしいかどうかは知らないが。
174デフォルトの名無しさん
2011/04/30(土) 12:01:22.84 >>173
> 他の言語でやさしいかどうかは知らないが。
APLという軟弱言語なら演算子三文字。
軟弱言語巡りをしてPrologにも立ち寄っているけど、
何を書いてもエラーか無限再帰になってしまう。
未だ正しい記述が出来ない orz
> 他の言語でやさしいかどうかは知らないが。
APLという軟弱言語なら演算子三文字。
軟弱言語巡りをしてPrologにも立ち寄っているけど、
何を書いてもエラーか無限再帰になってしまう。
未だ正しい記述が出来ない orz
175デフォルトの名無しさん
2011/04/30(土) 12:21:31.48 >>174
せめて計算環境にあわせてブロック分割くらいしようぜ
せめて計算環境にあわせてブロック分割くらいしようぜ
176デフォルトの名無しさん
2011/04/30(土) 13:21:02.33 >>174
こんな感じじゃないかな。個々の述語は単純だよ。
m_mult(L1,L2,X) :- m_trans(L2,L4),m_mult_1(L1,L4,X) .
m_trans([],[],[]) :- !.
m_trans([[A|R]|R1],[A|R2],[R|R3]) :- m_trans(R1,R2,R3) .
m_trans([[]|_],[]) :- !.
m_trans(L,[B|R1]) :- m_trans(L,B,R2),m_trans(R2,R1),!.
m_mult_1([],_,[]) :- !.
m_mult_1([A|R1],L,[S1|R3]) :- m_mult_2(A,L,S1),m_mult_1(R1,L,R3).
m_mult_2(_,[],[]) :- !.
m_mult_2(A,[B|R2],[C|R3]) :- m_mult_3(A,B,C), m_mult_2(A,R2,R3).
m_mult_3([],[],0) :- !.
m_mult_3([A|R1],[B|R2],S) :- S1 is A * B,m_mult_3(R1,R2,S2),S is S1 + S2.
こんな感じじゃないかな。個々の述語は単純だよ。
m_mult(L1,L2,X) :- m_trans(L2,L4),m_mult_1(L1,L4,X) .
m_trans([],[],[]) :- !.
m_trans([[A|R]|R1],[A|R2],[R|R3]) :- m_trans(R1,R2,R3) .
m_trans([[]|_],[]) :- !.
m_trans(L,[B|R1]) :- m_trans(L,B,R2),m_trans(R2,R1),!.
m_mult_1([],_,[]) :- !.
m_mult_1([A|R1],L,[S1|R3]) :- m_mult_2(A,L,S1),m_mult_1(R1,L,R3).
m_mult_2(_,[],[]) :- !.
m_mult_2(A,[B|R2],[C|R3]) :- m_mult_3(A,B,C), m_mult_2(A,R2,R3).
m_mult_3([],[],0) :- !.
m_mult_3([A|R1],[B|R2],S) :- S1 is A * B,m_mult_3(R1,R2,S2),S is S1 + S2.
177デフォルトの名無しさん
2011/05/05(木) 11:19:35.03 コピペなんですがこういうのも論理型言語で記述できるのでしょうか?
> 357 :名無しさん@涙目です。(東京都):2011/05/02(月) 19:15:52.75 ID:Of9kzpjA0
> こんなのもあるな
> 登場人物は4人。(男の子、女の子、アイスクリーム屋さん、お母さん)
>
> 男の子と女の子が公園で遊んでいると、アイスクリーム屋さんがきます。
> ふたりはアイスが食べたいが、男の子はお金を持っていません。
> アイスクリーム屋さんが「今日はずっと公園でお店やるよ。」 というので、男の子は家にお金を取りに行きます。
> 途中でアイスクリーム屋さんの気が変わり、学校でお店を出すことになり
> 女の子に「男の子に学校に来るように伝えに行って」と、頼みます。
> アイスクリーム屋さんが、学校に向かう途中で、お金を取りに行った男の子に会います。
> アイスクリーム屋さんは男の子に学校にお店を出すことにした事を伝え、一緒に学校に行きます。
> その頃、家に着いた女の子はお母さんから、「男の子は、もうアイスを買いに行った」ことを、聞きます。
>
> さて、ここで問題です。女の子はどこに男の子を探しに行くでしょうか?
> 357 :名無しさん@涙目です。(東京都):2011/05/02(月) 19:15:52.75 ID:Of9kzpjA0
> こんなのもあるな
> 登場人物は4人。(男の子、女の子、アイスクリーム屋さん、お母さん)
>
> 男の子と女の子が公園で遊んでいると、アイスクリーム屋さんがきます。
> ふたりはアイスが食べたいが、男の子はお金を持っていません。
> アイスクリーム屋さんが「今日はずっと公園でお店やるよ。」 というので、男の子は家にお金を取りに行きます。
> 途中でアイスクリーム屋さんの気が変わり、学校でお店を出すことになり
> 女の子に「男の子に学校に来るように伝えに行って」と、頼みます。
> アイスクリーム屋さんが、学校に向かう途中で、お金を取りに行った男の子に会います。
> アイスクリーム屋さんは男の子に学校にお店を出すことにした事を伝え、一緒に学校に行きます。
> その頃、家に着いた女の子はお母さんから、「男の子は、もうアイスを買いに行った」ことを、聞きます。
>
> さて、ここで問題です。女の子はどこに男の子を探しに行くでしょうか?
178デフォルトの名無しさん
2011/05/10(火) 17:16:11.53 よくわからんけど、これは情報格差を見失わないでいられるか、みたいなのを確かめる試験みたいなもので、
パズルではないような
パズルではないような
179デフォルトの名無しさん
2011/05/10(火) 19:26:17.19 発達心理学の有名な問題で、
女の子が一定年齢以下だと公園に行くけど、一定年齢以上だと学校に行くとか、そんな話じゃなかったかと。
女の子が一定年齢以下だと公園に行くけど、一定年齢以上だと学校に行くとか、そんな話じゃなかったかと。
180デフォルトの名無しさん
2011/05/10(火) 20:14:33.59 「女の子は男の子が学校に向かうことを知っているか?」
とかそんな形でモデル化できないこともないかな。
この場合「知らない」なので「公園に行く」になるような。
その文章が表現してる知識全部がうまくいくかどうかはわからない。
>>179 逆かな。
とかそんな形でモデル化できないこともないかな。
この場合「知らない」なので「公園に行く」になるような。
その文章が表現してる知識全部がうまくいくかどうかはわからない。
>>179 逆かな。
181デフォルトの名無しさん
2011/05/11(水) 18:29:25.78182デフォルトの名無しさん
2011/05/11(水) 18:48:08.31 自然言語の曖昧さとかに依存してるなら難しいけど、
(有名な例では、
「宵の明星は金星である」「金星は宵の明星である」
「明けの明星は金星である」「金星は明けの明星である」はいずれも真である。
では、「宵の明星は明けの明星である」は真か、みたいな)
入り組んでいるだけなら論理として扱えると思うけどね。
(有名な例では、
「宵の明星は金星である」「金星は宵の明星である」
「明けの明星は金星である」「金星は明けの明星である」はいずれも真である。
では、「宵の明星は明けの明星である」は真か、みたいな)
入り組んでいるだけなら論理として扱えると思うけどね。
183デフォルトの名無しさん
2011/05/11(水) 21:02:08.06184デフォルトの名無しさん
2011/05/11(水) 21:12:23.17 訂正
× Socrates
○ socrates
だった。
あと女の子の応答もYes/Noだ。
× Socrates
○ socrates
だった。
あと女の子の応答もYes/Noだ。
185デフォルトの名無しさん
2011/05/21(土) 23:11:01.23 あるリストから要素数Nの部分集合が全部ほしいんですがどうすればいいでしょうか?
186デフォルトの名無しさん
2011/05/21(土) 23:54:31.20 >>185
http://www.geocities.jp/m_hiroi/prolog/prolog02.html
部分集合の判定
selects([], Ys).
selects([X | Xs], Ys) :- select(X, Ys, Ys1), selects(Xs, Ys1).
http://www.geocities.jp/m_hiroi/prolog/prolog02.html
部分集合の判定
selects([], Ys).
selects([X | Xs], Ys) :- select(X, Ys, Ys1), selects(Xs, Ys1).
187デフォルトの名無しさん
2011/05/22(日) 00:13:53.59 >>186
はい、自分もそこを見て
selects(Xs,Ys,Z):-selects(Xs,Ys),length(Xs,Z)
みたいにして要素数Zの部分集合を得て、さらに並べ替えがいらないんで
selects(Xs,Ys,Z):-selects(Xs,Ys),length(Xs,Z),sort(Xs,Xs).
みたいにしたんですが、なんかすごくブサイクな感じなんでなんかないかなーと思いまして
はい、自分もそこを見て
selects(Xs,Ys,Z):-selects(Xs,Ys),length(Xs,Z)
みたいにして要素数Zの部分集合を得て、さらに並べ替えがいらないんで
selects(Xs,Ys,Z):-selects(Xs,Ys),length(Xs,Z),sort(Xs,Xs).
みたいにしたんですが、なんかすごくブサイクな感じなんでなんかないかなーと思いまして
188デフォルトの名無しさん
2011/05/22(日) 00:33:02.43 全生成して要素数N以外を捨てる
これが富豪か
これが富豪か
189デフォルトの名無しさん
2011/05/22(日) 02:41:57.82 >>187
http://www.geocities.jp/m_hiroi/prolog/yapp02.html
●問題32
?- combination(3, [a, b, c, d, e], X).
X = [a, b, c] ;
X = [a, b, d] ;
X = [a, b, e] ;
X = [a, c, d] ;
X = [a, c, e] ;
X = [a, d, e] ;
X = [b, c, d] ;
X = [b, c, e] ;
X = [b, d, e] ;
X = [c, d, e] ;
false.
http://www.geocities.jp/m_hiroi/prolog/yapp02.html
●問題32
?- combination(3, [a, b, c, d, e], X).
X = [a, b, c] ;
X = [a, b, d] ;
X = [a, b, e] ;
X = [a, c, d] ;
X = [a, c, e] ;
X = [a, d, e] ;
X = [b, c, d] ;
X = [b, c, e] ;
X = [b, d, e] ;
X = [c, d, e] ;
false.
190デフォルトの名無しさん
2011/05/22(日) 03:13:51.21191デフォルトの名無しさん
2011/05/27(金) 23:13:42.01 今、学生がprologを学ぶ意義って何だろう?
いや、個人的には活用してるけど、俺みたいな言語おたく以外の
普通の学生が、カットの挙動やら、失敗駆動ループやらを
頑張って勉強する価値はあるのかな。
たぶん、大多数はprologなんて一生使わないと思われる。
いや、個人的には活用してるけど、俺みたいな言語おたく以外の
普通の学生が、カットの挙動やら、失敗駆動ループやらを
頑張って勉強する価値はあるのかな。
たぶん、大多数はprologなんて一生使わないと思われる。
192デフォルトの名無しさん
2011/05/28(土) 00:09:52.15 この言語をマスターしたら論破できるようになるの?
193デフォルトの名無しさん
2011/05/28(土) 00:13:38.05194デフォルトの名無しさん
2011/05/28(土) 03:31:59.08 >>191
今後使うためとしか答えられない。我々の思考に最も
近い言語はやはりこの言語なのであって、その事が
評価される時が再び来るということだろう。
興味深いことは、結構優秀な学生にとっても
Prologは決してやさしくはないということ。これが謎。
今後使うためとしか答えられない。我々の思考に最も
近い言語はやはりこの言語なのであって、その事が
評価される時が再び来るということだろう。
興味深いことは、結構優秀な学生にとっても
Prologは決してやさしくはないということ。これが謎。
195デフォルトの名無しさん
2011/05/28(土) 05:00:47.97196デフォルトの名無しさん
2011/05/28(土) 08:26:06.18 >>195
大学の講座は論理学絡みだからね。前提が。
実務では、実際appendしか使いませんね。
append使うためにはリストに取らなくては
ならないから、変換器として、findallは
多用するけどね。
大学の講座は論理学絡みだからね。前提が。
実務では、実際appendしか使いませんね。
append使うためにはリストに取らなくては
ならないから、変換器として、findallは
多用するけどね。
197デフォルトの名無しさん
2011/05/28(土) 08:33:14.38 >>191
学ぶ意義のある言語というと、JavaとかCとか?
つまらん学校だw
本当の学校ってのは、遊びに行くところ。
prologの授業受けてトラウマ/コンプレックス/やみつきになるくらいでちょうど良い。
学ぶ意義のある言語というと、JavaとかCとか?
つまらん学校だw
本当の学校ってのは、遊びに行くところ。
prologの授業受けてトラウマ/コンプレックス/やみつきになるくらいでちょうど良い。
198デフォルトの名無しさん
2011/05/28(土) 08:36:19.95 SLDNFが人間の思考に近いとは思えんなあ。
prologで普遍的な価値があるのは純粋論理の部分だけじゃないか。
prologで普遍的な価値があるのは純粋論理の部分だけじゃないか。
199デフォルトの名無しさん
2011/05/28(土) 09:07:38.68200デフォルトの名無しさん
2011/05/28(土) 09:22:22.26201デフォルトの名無しさん
2011/05/28(土) 09:54:25.63202デフォルトの名無しさん
2011/05/28(土) 10:34:32.82 >>201
私もそれで十分だと思うけど。
私もそれで十分だと思うけど。
203デフォルトの名無しさん
2011/05/28(土) 10:43:29.71 要は事務屋のSQL代わりってわけか。
そんなものに多大な国家予算をつぎこんだ日本って…
そんなものに多大な国家予算をつぎこんだ日本って…
204デフォルトの名無しさん
2011/05/28(土) 11:07:06.71205デフォルトの名無しさん
2011/05/28(土) 15:33:51.21206デフォルトの名無しさん
2011/05/28(土) 15:37:15.41 >>194
>Prologは決してやさしくはない
手続き型がマシなだけで、関数型も論理
型も宣言型も同等にわかりにくいんだろ。
トップダウンのルールベースってのが
鬼門なんだろうな。
オレも、ややこしくなると結局、逐次的に
手続き的に処理を追っかけていくしな。
>Prologは決してやさしくはない
手続き型がマシなだけで、関数型も論理
型も宣言型も同等にわかりにくいんだろ。
トップダウンのルールベースってのが
鬼門なんだろうな。
オレも、ややこしくなると結局、逐次的に
手続き的に処理を追っかけていくしな。
207デフォルトの名無しさん
2011/05/28(土) 16:29:30.76 appendって何?リストの追加?
208デフォルトの名無しさん
2011/05/28(土) 16:48:35.26 >>207
?- append(L0,[X|R],[1,2,3]).
L0 = [],
X = 1,
R = [2,3];
L0 = [1],
X = 2,
R = [3];
L0 = [1,2],
X = 3,
R = [];
no.
?-
?- append(L0,[X|R],[1,2,3]).
L0 = [],
X = 1,
R = [2,3];
L0 = [1],
X = 2,
R = [3];
L0 = [1,2],
X = 3,
R = [];
no.
?-
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 [蚤の市★]
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 [蚤の市★]
- 地震 [Hitzeschleier★]
- 【STARTO ENTERTAINMENT】SUPER EIGHTの横山裕、フジ『ドッキリGP』ロケで全治2ヶ月の重傷 [Ailuropoda melanoleuca★]
- 【話題】好きな鍋は?! 「寄せ鍋」「キムチ鍋」「水炊き」「もつ鍋」「豆乳鍋」「ちゃんこ鍋」「ごま坦々鍋」「トマト鍋」 [ひぃぃ★]
- 【地震】 茨城 栃木 埼玉 千葉 震度4 [KingFisherは魚じゃないよ★]
- 【お漏らし】日銀、0.25%利上げへ [256556981]
- J( 'ー`)し「で、アンタなんで働かないの?」 ワイ👶「理由は2つありまして~」🏡
- 【悲報】人気女性落語家、気づいてしまう…「将棋をみてたら女性にのみ女流棋士などと"女"をつけられる、くだんな笑」 [339712612]
- おさかなさんあつまれえ
- ムミィ🥺いる❓🏡
- もうなんか最近の日本人って大災害について"諦めてる"よな、災害が起きても助け合う精神がないもんな [904880432]
