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

■ このスレッドは過去ログ倉庫に格納されています

Prologの宿題片付けます

1 :デフォルトの名無しさん:2010/04/23(金) 16:02:04
Prologで宿題が出たら、自分でプログラムが書くことができた
人も、思い悩んでいる人も、ここにその問題を載せてください。
宿題はその講座がどんな内容かをちょっとだけ垣間見させて
くれます。
全国の大学に100を越える講座があるといわれるProlog。
どんな宿題がでてくるのか楽しみです。

2 :デフォルトの名無しさん:2010/04/23(金) 19:56:46
プロローグここまで

3 :デフォルトの名無しさん:2010/04/24(土) 00:01:27
予想1 すぐ過去ログ倉庫に流れる
予想2 質問と回答の文体が一致したまま何年も存続
予想3 事務処理の問題ばかりになる

4 :デフォルトの名無しさん:2010/04/25(日) 13:59:24
<問題> Prologでhttpdサーバーを構築しなさい。

5 :デフォルトの名無しさん:2010/04/26(月) 05:31:22
完全なウェブサーバーを構築するとなると
ちょっと大変だなぁ。宿題の域を越えている。


6 :デフォルトの名無しさん:2010/04/26(月) 07:17:44
HTTP1.0を実装することに絞ったとしても、数百行は必要なんじゃないか。


7 :デフォルトの名無しさん:2010/04/26(月) 07:30:34
>>6
http://nojiriko.asia/prolog/httpd_status_code.html
この中のhttpd_status_code/3だけで36行w

8 :デフォルトの名無しさん:2010/04/26(月) 08:00:11
>>4 は少し風呂敷を広げすぎてる感じがする。
apache.conf(apache2.conf)を仕様書と見立てて、単位節を定義し、
それにルールを付加していくことでhttpdサーバーの実装を試みなさい。

なんていうのなら、面白そう。


9 :デフォルトの名無しさん:2010/04/26(月) 08:19:38
>>8
なるほどね。それでは

<問題>
apache.confのような解説文とキーワードが区別なくコメントアウトされて
いる仕様書から、キーワード定義だけ述語として定義するためのルールを
Prolog述語として定義しなさい。

10 :デフォルトの名無しさん:2010/04/26(月) 18:16:05
>>9
例えば、
# Include the virtual host configurations:
# Include /etc/apache2/sites-enabled/

で、上は説明。下は定義節。とどうやって切り分けるのかな。


11 :デフォルトの名無しさん:2010/04/27(火) 06:07:41
>>8 をやってみて、それから >>9 を試みる方がよさそうだ。

12 :デフォルトの名無しさん:2010/04/27(火) 19:29:14
>>8
やってはみたが、何の役にも立たないw

'ServerRoot'("/etc/apache2").
'LockFile'(' /var/lock/apache2/accept.lock').
'PidFile'('/var/run/apache2.pid').
'Timeout'(300).
'KeepAlive'('On').
'MaxKeepAliveRequests'(100).
'KeepAliveTimeout'(15).
'StartServers'(5) :- 'IfModule'('mpm_prefork_module').
'MinSpareServers'(5) :- 'IfModule'('mpm_prefork_module').
'MaxSpareServers'(10) :- 'IfModule'('mpm_prefork_module').
'MaxClients'(150) :- 'IfModule'('mpm_prefork_module').
'MaxRequestsPerChild'(0) :- 'IfModule'('mpm_prefork_module').
'StartServers'(2) :- 'IfModule'('mpm_worker_module').
'MaxClients'(150) :- 'IfModule'('mpm_worker_module').
'MinSpareThreads'(25) :- 'IfModule'('mpm_worker_module').
'MaxSpareThreads'(75) :- 'IfModule'('mpm_worker_module').
'ThreadsPerChild'(25) :- 'IfModule'('mpm_worker_module').
'MaxRequestsPerChild'(0) :- 'IfModule'('mpm_worker_module').
'User'('www-data').
'Group'('www-data').
'AccessFileName'('.htaccess').
'DefaultType'('text/plain').
'HostnameLookups'('Off').

13 :デフォルトの名無しさん:2010/04/27(火) 19:30:35
>>8 続き

'ErrorLog'('/var/log/apache2/error.log').
'LogLevel'('warn').
'Include'('/etc/apache2/mods-enabled/*.load').
'Include'('/etc/apache2/mods-enabled/*.conf').
'Include'('/etc/apache2/httpd.conf').
'Include'('/etc/apache2/ports.conf').
'LogFormat'('"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""',combined).
'LogFormat'('"%h %l %u %t \"%r\" %>s %b"',common).
'LogFormat'('"%{Referer}i -> %U"',referer).
'LogFormat'('"%{User-agent}i"',agent).
'ServerTokens'('Full').
'ServerSignature'('On').
'Include'('/etc/apache2/conf.d/').
'DocumentRoot'('/').
'order'([allow,deny]) :- 'Directory'('/').
'alow'(from(all)) :- 'Directory'('/').
'Include'('/etc/apache2/sites-enabled/').


14 :デフォルトの名無しさん:2010/04/27(火) 20:55:10
>>12
確かに役にたたない。apacheのconfigってこんなに簡素なものだったかな。
全然、httpdの全体像が見えてこないね。このアプローチは失敗ということで。


15 :デフォルトの名無しさん:2010/04/27(火) 21:00:30
以前はapache.conf一本に纏めてあったのが、現在はincludeファイルに分散している
だけの違いだろう。全部、includeしてから作業をしなくてはいけない。


16 :デフォルトの名無しさん:2010/04/28(水) 07:04:07
<問題> 行列が単位行列であるかどうか検査する述語 単位行列/1 を定義せよ。

17 :デフォルトの名無しさん:2010/04/28(水) 09:49:07
>>16
<問題> 単位行列であるかどうかの検査には正方行列であるかどうかの
検査も必要です。この検査述語 正方行列/1 も定義せよ。

18 :デフォルトの名無しさん:2010/04/28(水) 10:56:34
>>17

正方行列(_正方行列) :-
    length(_正方行列,_行数),
    正方行列(1,_行数,_正方行列).

正方行列(N,_次数,[]) :-
    N > _次数,!.
正方行列(N,_次数,[_行|R]) :-
    length(_行,_次数),
    N2 is N + 1,
    正方行列(N2,_次数,R).


19 :デフォルトの名無しさん:2010/04/28(水) 11:31:02
>>16

単位行列(_単位行列) :-
    正方行列(_単位行列),
    length(_単位行列,_次数),
    単位行列(1,_次数,_単位行列).

単位行列(M,N,[]) :- M > N,!.
単位行列(M,N,[_行|R]) :-
    単位行列(M,1,N,_行),
    M2 is M + 1,
    単位行列(M2,N,R).


20 :デフォルトの名無しさん:2010/04/28(水) 11:36:15
>>19 一番肝心な定義が切れてしまった。

単位行列(M,N1,N,[]) :- N1 > N,!.
単位行列(M,M,N,[1|R]) :-
    N2 is M + 1,
    単位行列(M,N2,N,R).
単位行列(M,N1,N,[0|R]) :-
    \+(N1 = M),
    N2 is N1 + 1,
    単位行列(M,N2,N,R).


21 :デフォルトの名無しさん:2010/04/28(水) 12:06:50
<問題> {やや、曖昧で文学的な文章を述語定義すること}

「ダンスは・・・・・・魂の原型が、いまだ男性的とも女性的とも分かれていないで、ただ≪人間的≫としか
いいあらわすことができないような・・・・・・深みとつながっている」。このマックス・テルピスの言葉(原註64)は、
とくにダンス・クラシック・アカデミックにあてはまる。ダンス・クラシックの舞踊家が完全なる人間を
表すとすれば、この舞踊家は、二つの性を兼ねた人間の原型を表しているのだ。つまり、舞踊家の中に、二つの
性をもった人間の原型が回想されるのである。

この文は『バレエ 形式と象徴』 ゲルハルト・ツァハリアス著 渡辺鴻訳 美術出版社 1965年 の中にあります。

この文の要旨のメモをProlog述語として記述するなら、どんな定義になりますか?

22 :デフォルトの名無しさん:2010/04/29(木) 17:05:16
<問題> 森と林
森と林はどちらも樹木の集合、塊ですが、
林は、同じ種類の樹木で構成され、
森は、いろいろな種類の樹木が混ざった状態のものだと考えられます。

森と林をProlog述語として定義しなさい。

23 :デフォルトの名無しさん:2010/04/29(木) 18:14:23
>>22
「林は概ね同じ種類の樹木で構成され」ですね。

雑木林という概念はありますがこれは例外です。この例外も
述語としての定義に含めてください。

24 :デフォルトの名無しさん:2010/04/30(金) 09:27:46
誰の譯だか忘れたけれど、「流浪の民」の出だしは
"ブナの森の葉隠に"じゃなかったかな?


25 :デフォルトの名無しさん:2010/04/30(金) 12:15:34
>>23

概ねの閾値(0.9).

林は概ね同じ種類の樹木で構成され(_林) :-
    list(_林),
    概ねの閾値(_概ねの閾値),
    length(_林,_木の本数),
    setof(_木,member(_木,_林),L),
    findmax([Count,_木],(member(_木,L),count(member(_木,_林),Count)),[_一番多い木の本数,_一番多い木]),
    _一番多い木の本数 >= truncate(_木の本数 * _概ねの閾値).

26 :デフォルトの名無しさん:2010/04/30(金) 15:41:11
>>23

混在の閾値(3/13).

森は、いろいろな種類の樹木が混ざった状態(_森) :-
    list(_森),
    混在の閾値(N1/N2),
    length(L0,N2),
    先頭から全ての連続した一定要素の中に閾値以上の混在が見られる(N1/N2,L0,_森).

先頭から全ての連続した一定要素の中に閾値以上の混在が見られる(N1/N2,L0,L) :-
    length(L,Len),
    Len < N2,!.
先頭から全ての連続した一定要素の中に閾値以上の混在が見られる(N1/N2,L0,_森) :-
    append(L0,L1,_森),
    setof(_樹木,member(_樹木,L0),L),
    length(L,Len),
    Len < N1,!,fail.
先頭から全ての連続した一定要素の中に閾値以上の混在が見られる(N1/N2,L0,[_|R]) :-
    先頭から全ての連続した一定要素の中に閾値以上の混在が見られる(N1/N2,L0,R).

27 :デフォルトの名無しさん:2010/04/30(金) 15:52:07
>>26
% これだと12本以下の樹木の集合は種類を問わず「森」になってしまう。
% 少々武骨だが、以下の2副目標を加える必要がある。

森は、いろいろな種類の樹木が混ざった状態(_森) :-
    list(_森),
    length(_森,_樹木の本数),
    _樹木の本数 >= N2,
    混在の閾値(N1/N2),
    length(L0,N2),
    先頭から全ての連続した一定要素の中に閾値以上の混在が見られる(N1/N2,L0,_森).


28 :デフォルトの名無しさん:2010/04/30(金) 15:54:17
>>27 まちがえた。Prologは遅延評価しないからね。

森は、いろいろな種類の樹木が混ざった状態(_森) :-
    list(_森),
    length(_森,_樹木の本数),
    混在の閾値(N1/N2),
    _樹木の本数 >= N2,
    length(L0,N2),
    先頭から全ての連続した一定要素の中に閾値以上の混在が見られる(N1/N2,L0,_森).

29 :デフォルトの名無しさん:2010/05/01(土) 08:10:17
<問題> 例えば、2引数の述語fooが'foo#2.pro'というファイルに
管理されているとします。このfoo/2の最終に引数で与えられた
節を追加する述語をfassertz/2を定義しなさい。
第一引数にはファイル名、第二引数には定義節が来ることとします。

30 :デフォルトの名無しさん:2010/05/01(土) 08:17:48
<問題> ユーザ定義述語が多数定義済みの環境を考えます。
定義済み節の本体に現れる副目標を引数に与えて、
その副目標を含む述語定義をすべて表示する述語を
定義しなさい。

31 :デフォルトの名無しさん:2010/05/01(土) 11:29:14
>>30

listing_subgoal(Subgoal) :-
    listing_subgoal(Subgoal,L),
    listing_subgoal_表示(L).

listing_subgoal(Subgoal,L) :-
    tmpnam(File),
    tell(File),
    listing,
    told,
    see(File),
    read(X),
    listing_subgoal(X,Subgoal,[],L),
    seen.

listing_subgoal(end_of_file,_,L1,L2) :- reverse(L1,L2),!.
listing_subgoal((Head :- Body),Subgoal,L1,L2) :-
    listing_subgoal_search(Subgoal,Body),
    functor(Head,F,A),
    \+(member(F/A,L)),
    read(X),
    listing_subgoal(X,Subgoal,[F/A|L1],L2).
lilsting_subgoal(_,Subgoal,L1,L2) :-
    read(X),
    listing_subgoal(X,Subgoal,L1,L2).

32 :デフォルトの名無しさん:2010/05/01(土) 11:38:11
>>30 つづき

listing_subgoal_search(Subgoal,V) :- var(V),!,fail.
listing_subgoal_search(Subgoal,Subgoal) :- !.
listing_subgoal_search(Subgoal,call(P)) :- listing_subgoal_search(Subgoal,P),!.
listing_subgoal_search(Subgoal,findall(_,P,_)) :- listing_subgoal_search(Subgoal,P),!.
listing_subgoal_search(Subgoal,setof(_,P,_)) :- listing_subgoal_search(Subgoal,P),!.
listing_subgoal_search(Subgoal,bagof(_,P,_)) :- listing_subgoal_search(Subgoal,P),!.
listing_subgoal_search(Subgoal,count(P,_)) :- listing_subgoal_search(Subgoal,P),!.
listing_subgoal_search(Subgoal,max(P,_)) :- listing_subgoal_search(Subgoal,P),!.
listing_subgoal_search(Subgoal,min(P,_)) :- listing_subgoal_search(Subgoal,P),!.
listing_subgoal_search(Subgoal,avg(P,_)) :- listing_subgoal_search(Subgoal,P),!.
listing_subgoal_search(Subgoal,findmax(_,P,_)) :- listing_subgoal_search(Subgoal,P),!.
listing_subgoal_search(Subgoal,findmin(_,P,_)) :- listing_subgoal_search(Subgoal,P),!.
listing_subgoal_search(Subgoal,findavg(_,P,_)) :- listing_subgoal_search(Subgoal,P),!.
listing_subgoal_search(Subgoal,(P1,P2)) :-
    listing_subgoal_search_3(Subgoal,P1,P2),!.
listing_subgoal_search(Subgoal,(P1;P2)) :-
    listing_subgoal_search_3(Subgoal,P1,P2),!.

listing_subgoal_search_3(Subgoal,P1,P2) :-
    listing_subgoal_search(Subgoal,P1),!.
listing_subgoal_search_3(Subgoal,P1,P2) :-
    listing_subgoal_search(Subgoal,P2),!.

listing_subgoal_表示([]) :- !.
listing_subgoal_表示([F/A|R]) :- listing(F/A),listing_subgoal_表示(R).

33 :デフォルトの名無しさん:2010/05/01(土) 11:41:17
>>29

fassertz(File,P) :-
    open(File,append,Output),
    writeq(Output,P),
    write(Output,'.\n'),
    close(Output),!.


34 :デフォルトの名無しさん:2010/05/01(土) 11:50:24
>>29

fassertz(File,P) :-
    reconsult(File),
    assertz(P),
    fassert_functor(P,F,A),
    tell(File),
    lisitng(F/A),
    told.

fassertz_functor((Head :- Body),F,A) :-
    functor(Head,F,A),!.
fassertz_functor(P,F,A) :-
    functor(P,F,A),!.

35 :デフォルトの名無しさん:2010/05/01(土) 12:25:44
<問題>
先頭要素と同じ要素が残りに現れるリストがあります。このリストを第一引数として、この先頭要素と同じ要素の
一つ前と一つ後ろの要素が存在するならばこの3要素を第二引数にリストして返す非決定性の述語を定義しなさい。

36 :デフォルトの名無しさん:2010/05/01(土) 12:35:40
>>35

リストの先頭要素と同じ要素の一つ前と一つ後ろの要素が存在するならばこの3要素を第二引数にリストして返す([B|R],
[A,B,C]) :-
    append(_,[A,B,C|_],[B|R]).

37 :デフォルトの名無しさん:2010/05/05(水) 05:17:32
<問題>
リストの要素として、4個目の'a'を見つけて残りのリストを返す述語を定義しなさい。


38 :デフォルトの名無しさん:2010/05/05(水) 05:23:42
<問題>
リストの要素が変数Xで与えられるとする。N個目のXの残りのリストを返す述語を定義しなさい。


39 :デフォルトの名無しさん:2010/05/05(水) 06:04:47
>>37

'リストの要素として、4個目のaを見つけて残りのリストを返す'(_リスト,_残りリスト) :-
   append(L0,_残りリスト,_リスト),
   count(append(_,[a|_],L0),4),!.

40 :デフォルトの名無しさん:2010/05/05(水) 06:27:52
>>38

'リストの要素が変数Xで与えられるとする。N個目のXの残りのリストを返す'(N個目,X,_リスト,_残りリスト) :-
   append(L0,_残りリスト,_リスト),
   count(append(_,[X|_],_リスト),N個目),!.


41 :デフォルトの名無しさん:2010/05/05(水) 07:18:59
<問題>
リストの中の要素Xの残りのリストがパターンPに適合するからどうか判定する述語を定義しなさい。
パターンとの照合はこの述語のなかでcall(P)することで実現するものとする。

42 :デフォルトの名無しさん:2010/05/05(水) 07:28:04
>>41

リストの中の要素Xの残りのリストがパターンPに適合するからどうか判定する述語(_リスト,X,P,R) :-
   append(_,[X|R],_リスト),
   call(P).

% 要点は、引数にRを持つこと。そして、実際に目標とする時はPの引数の中にRが含ませる。


43 :デフォルトの名無しさん:2010/05/05(水) 08:09:26
>>42
% 要点は、引数にRを持つこと。そして、実際に目標とする時はPの引数の中にRを含ませる。

?- リストの中の要素Xの残りのリストがパターンPに適合するからどうか判定する述語([1,2,3,4,6,2,1],3,max(R,6),R).
R = [4,6,2,1]
yes
?- リストの中の要素Xの残りのリストがパターンPに適合するからどうか判定する述語([1,2,3,4,6,2,1],3,max(R,2),R).
no
?- リストの中の要素Xの残りのリストがパターンPに適合するからどうか判定する述語([1,2,3,4,6,2,1],3,length(R,Len),R).
R = [4,6,2,1],
Len = 4
yes
?-

44 :デフォルトの名無しさん:2010/05/05(水) 08:13:13
>>43
すみません、訂正。>>43の三番目のパターンのような使い方も可だが。

?- リストの中の要素Xの残りのリストがパターンPに適合するからどうか判定する述語([1,2,3,4,6,2,1],3,length(R,4),R).
R = [4,6,2,1]
yes
?-

45 :デフォルトの名無しさん:2010/05/05(水) 09:51:45
<問題>
親子(義朝,頼朝).
親子(為義,義朝).
先祖(A,B) :- 親子(A,B).
先祖(A,B) :- 親子(A,C),先祖(C,B).

先祖関係をProlog述語として定義すると上記のようになるでしょう。
ところで、この定義なぜ親子関係だけ具体的な値で示されているので
しょうか。なぜルールで定義されていないのでしょうか。

どのような切り口、表現でも構いませんから、平易に説明してください。

46 :デフォルトの名無しさん:2010/05/05(水) 20:07:41
<問題>
以下の文章は原色図鑑ライブラリー「蛾」監修 河田黨 1955年北隆館発行 からの抜粋です

ごまだらきこけが [ひとりが科]
開帳は23~32mm。体と翅は赤味がかった黄色で前翅には15個の黒い斑点がある。
発生するのは6~7月頃で普通にみられる種類である。分布は本邦はじめ広くアジアに
ひろがっている。幼虫は背に青い点を2列もった灰色の毛虫で長い毛があるひとりが科
の中でもこけがといわれる種類のものは,大部分その名の通り幼虫はコケ類を食べる。

ここで示されている情報をProlog述語として定義せよ。


47 :デフォルトの名無しさん:2010/05/06(木) 01:43:27
>>46
% あまりにも基本的な解答例

出典('原色図鑑ライブラリー「蛾」監修 河田黨 1955年北隆館',_).

蛾(ごまだらきこけが,ひとりが科,'開帳は23~32mm。体と翅は赤味がかった黄色で前翅に
は15個の黒い斑点がある。分布は本邦はじめ広くアジアにひろがっている。幼虫は背に青
い点を2列もった灰色の毛虫で長い毛があるひとりが科の中でもこけがといわれる種類の
ものは,大部分その名の通り幼虫はコケ類を食べる。') :- 出典('原色図鑑ライブラリー「蛾」監修 河田黨 1955年北隆館',_).



48 :デフォルトの名無しさん:2010/05/06(木) 07:09:59
<問題>
述語 蛾/3 が>>47の形式で与えられたとして、第一引数の検索語から
和名、説明文を得る非決定性の述語 蛾検索/3 を定義しなさい。

49 :デフォルトの名無しさん:2010/05/06(木) 13:24:57
>>41->>44
パターンを引数に与えて検索すること自体がPrologプログラミングと
して誤った姿勢であると思う。
常にそのパターン検出述語を定義してから、検索すること。
このことを厭うならPrologプログラマとして失格だ。
高階述語を使うのは仕様の文章に強制された場合だけ。


50 :デフォルトの名無しさん:2010/05/06(木) 18:07:50
>>49
基本的に、その見解に賛成。>>45の解とも重なるが、常に具体的な何かを
見据えたプログラミング姿勢が必要だと思う。
>>41はappendの利用法の勉強のための問題で、なにをやりたいかを強調するために
引数の中にその要求を埋めたように思うけれど。

51 :デフォルトの名無しさん:2010/05/06(木) 18:50:54
>>48

蛾検索(_検索語,_和名,_説明文) :-
   蛾(_和名,_科,_説明文),
   蛾検索(_検索語,_説明文).

蛾検索(_検索語,_説明文) :-
   sub_atom(_説明文,_,_,_,_検索語),!.

52 :デフォルトの名無しさん:2010/05/07(金) 00:22:21
>>48

蛾検索(_検索語,_和名,_説明文) :-
   蛾(_和名,_科,_説明文),
   検索語が説明文の中にある(_検索語,_説明文).

検索語が説明文の中にある(_検索語,_説明文) :-
   sub_atom(_説明文,_,_,_,_検索語),!.


53 :デフォルトの名無しさん:2010/05/07(金) 06:20:52
<問題>
>>48 に於いて、

蛾検索(_検索語,_和名,_説明文) :-
   蛾(_和名,_科,_説明文),
   sub_atom(_説明文,_,_,_,_検索語).

としていない理由を述べなさい。

54 :デフォルトの名無しさん:2010/05/07(金) 06:22:37
<問題>
>>52 に於いて、

蛾検索(_検索語,_和名,_説明文) :-
   蛾(_和名,_科,_説明文),
   sub_atom(_説明文,_,_,_,_検索語).

としていない理由を述べなさい。・・・でした。

55 :デフォルトの名無しさん:2010/05/07(金) 21:01:30
<問題>
バラディゼールで行われた1971-72年シーズンのアルペンスキーFISワールドカップ大回転緒戦で
優勝した選手は誰か。その選手は札幌オリンピックではどんな成績をあげたか。
これをWebサイト、新聞、雑誌、書籍等で調べて、Prolog述語としてその全ての情報を定義しなさい。

56 :デフォルトの名無しさん:2010/05/07(金) 21:02:23
>>55 訂正
バルディゼール

57 :デフォルトの名無しさん:2010/05/08(土) 07:39:17
<問題>
 なおここで、女性の官人についても触れておくべきであろう。後宮に奉仕する女官を総称して宮人と
いうが、高級の女官は命婦といった。命婦のうちでも五位以上の階位のある者を内命婦と呼び、五位以
上の官人の妻は、自分で位をもっていなくても、夫の資格によって五位に準じて宮中に出入することを
許されていた。これを外命婦という。だから、五位以上の貴族の妻は、位階の有無にかかわらず女官で
あったと考えてよい。
-- 「律令制の基調」 村尾次郎著 塙書房 昭和35年 -- より

上記の文章をProlog述語として定義しなさい。

58 :デフォルトの名無しさん:2010/05/08(土) 09:47:30
>>57 について
Prologの課題はそのまま文章を載せたいので、著作権の関係から出題を躊躇することが多い
けれど、この本は50年を経過しています。
村尾氏というと「右寄りの」歴史学者の先入観からあまり読んだことがなかったのですが、
論理的な文章を書かれる方だし、この本などは無限に問題を引き出すことができそうですね。


59 :デフォルトの名無しさん:2010/05/09(日) 20:37:49
>>55 について

1971年バルディゼール大回転の優勝者はエリック・ホーケル(ハーカー)だ。この新人は
大胆なストレート内傾ターンで途中転倒したにも拘らずすぐに起き上がりこのレースで
ワールドカップ初優勝を飾る。1973年苗場で行われたワールドカップ大回転を制して
日本では特に有名な彼だが、札幌オリンピックでは大回転一本目にラップを取りながら
二本目リズムに乗れないまま、前半の急斜面で転倒棄権した。しかし、滑降では5位に
入賞している。

60 :デフォルトの名無しさん:2010/05/10(月) 13:09:10
>>59
これは、情報を収集して、それを述語として定義する問題ですね。
そんなに簡単に完璧なヒントを出してしまったら・・・。


61 :デフォルトの名無しさん:2010/05/11(火) 05:42:45
>>55

'バルディゼールで行われた1971-72年シーズンのアルペンスキーFISワールドカップ大回転緒戦で優勝した選手は誰か。その選手は札幌オリンピックではどんな成績をあげたか。'(_誰,_札幌オリンピックでの成績) :-
    'バルディゼールで行われた1971-72年シーズンのアルペンスキーFISワールドカップ大回転緒戦で優勝した選手は'(_誰),
    その選手は札幌オリンピックではどんな成績をあげたか。(_誰,_札幌オリンピックでの成績).

その選手は札幌オリンピックではどんな成績をあげたか。(_誰,_札幌オリンピックでの成績) :-
    資料('THE XI OLYMPIC WINTER GAMES SAPPORO 1972','http://www.la84foundation.org/6oic/OfficialReports/1972/orw1972.pdf'),
    findall([_種目,_成績],オリンピック(_,札幌,_種目,成績,_誰),_札幌オリンピックでの成績).

バルディゼールで行われた1971-72年シーズンのアルペンスキーFISワールドカップ大回転緒戦で優勝した選手は(_誰) :-
    資料(ヒント,'http://pc12.2ch.net/test/read.cgi/tech/1272006124/59'),
    スキーワールドカップ(1971/_/_,バルディゼール,大回転,'1位',_誰).

スキーワールドカップ(1971/12/12,バルディゼール,大回転,'1位','エリック・ホーケル(ハーカー)').

オリンピック(1972/2/7,札幌,滑降,'5位','エリック・ホーケル(ハーカー)').
オリンピック(1972/2/9,札幌,大回転,'DNF','エリック・ホーケル(ハーカー)').
オリンピック(1972/2/13,札幌,回転,'DNF','エリック・ホーケル(ハーカー)').

資料('THE XI OLYMPIC WINTER GAMES SAPPORO 1972','http://www.la84foundation.org/6oic/OfficialReports/1972/orw1972.pdf').

資料(ヒント,'http://pc12.2ch.net/test/read.cgi/tech/1272006124/59').

62 :デフォルトの名無しさん:2010/05/11(火) 07:24:11
>>57

宮人(_宮人) :-
    奉仕する(_宮人,後宮),
    女官(_宮人).

命婦(_命婦) :-
    女官(_命婦),
    クラス(_命婦,高級).

内命婦(_内命婦) :-
    命婦(_内命婦),
    位階(_内命婦,五位以上).

外命婦(_外命婦) :-
    命婦(_外命婦),
    夫(_外命婦,_官人),
    位階(_官人,五位以上).

宮中に出入りできる(_外命婦) :- 外命婦(_外命婦).
宮中に出入りできる(_官人) :- 官人(_官人).

官人(_官人) :- 位階(_官人,五位以上).

63 :デフォルトの名無しさん:2010/05/11(火) 15:52:33
>>57

宮人(_宮人) :- 奉仕する(_宮人,後宮),女官(_宮人).

女官(_女官) :- 官人(_女官),性別(_女官,女).

命婦(_命婦) :- 女官(_命婦),内命婦(_命婦).
命婦(_命婦) :- 女官(_命婦),外命婦(_命婦).

内命婦(_内命婦) :- 命婦(_内命婦),位階(_内命婦,五位以上).

外命婦(_外命婦) :-
    命婦(_外命婦),
    \+(位階(_外命婦,_五位以上)),
    夫(_外命婦,_夫),
    位階(_夫,_五位以上),
    五位以上(_五位以上).

宮中に出入りできる(_外命婦) :- 外命婦(_外命婦).
宮中に出入りできる(_官人) :- 官人(_官人),位階(_官人,_五位以上),五位以上(_五位以上).

五位以上(_五位以上) :-
    member(_五位以上,[一位,従一位,二位,従二位,三位,従三位,四位,従四位,五位,従五位]).

64 :デフォルトの名無しさん:2010/05/11(火) 22:44:04
f(A,A):-1=1,!.

1=1を消して
このカットを引数のすぐ左に持ってくることはできますか?


65 :デフォルトの名無しさん:2010/05/12(水) 07:11:00
>>64
1)引数というのはこのばあいA,Aのことになるが・・・

!,f(A,A). はダメ。

f(A,!,A).
f(!,A,A). 3引数の別の述語定義と看做される。

引数として!をこのように表記すると多分syntax errorとなる。
f(A,(!),A).
f((!),A,A). なら可。

2)質問が引数ではなくて「本体」の 1=1のことを指していると考えよう。

1=1がtrueの代用だと考えると、
f(A,A) :- !.
f(A,A) :- true,!. と
f(A,A) :- !,true. は実質的に同じ意味。
ただ処理系によっては若干実行過程は異なるだろう。

66 :デフォルトの名無しさん:2010/05/13(木) 08:04:30
>>54
説明文のなかに検索語が複数含まれていると、
その回数分、_和名、_説明文が解として取れてしまう。
sub_atomを決定性の述語として扱うために再定義して
その本体に!を付加している。


67 :デフォルトの名無しさん:2010/05/21(金) 08:07:35
<問題> 「漁業情報学概論」小倉通男・竹内正一共著 成山堂書店刊 1990年
から、78頁の以下の文章を切り取りました。この文章からメモとして有用な
Prolog述語を定義しなさい。

カツオは南・北緯40°間に広く分布する熱帯性ないし温帯性の表層回遊魚で
ある。太平洋のカツオは西部太平洋系群と中東部太平洋系群の2つに分けられ
るが,形態による識別は困難であるといわれる。日本漁船が漁獲対象としてい
るのは,大部分が西部太平洋系群と考えられている。

68 :デフォルトの名無しさん:2010/05/21(金) 08:58:20
<問題> ある小さな農園で自家製ジュースを販売することになりました。
バラ売りの単位として
1.. 250cc
2.. 500cc
3.. 1L
そしてケース売りの単位として、
5.. 250ccが12個
6.. 1Lが12個
7.. 250ccが60個
を用意することになりました。この単位をProlog述語 '荷姿' として定義しなさい。


69 :デフォルトの名無しさん:2010/05/24(月) 19:48:08
>>67

生息域分類(_カツオ,_表層回遊魚) :- カツオ(_カツオ),表層回遊魚(_表層回遊魚).

分布(_カツオ,_南・北緯40°間) :- カツオ(_カツオ),南・北緯40°間(_南・北緯40°間).

環境(_カツオ,熱帯性) :- カツオ(_カツオ),生息環境(_カツオ,_環境),熱帯性(_環境).
環境(_カツオ,温帯性) :- カツオ(_カツオ),生息環境(_カツオ,_環境),温帯性(_環境).

系統(_カツオ,西部太平洋系) :- カツオ(_カツオ),特徴(_カツオ,_特徴),西部太平洋系(_カツオ,_特徴).
系統(_カツオ,中東部太平洋系) :- カツオ(_カツオ),特徴(_カツオ,_特徴),中東部太平洋系(_カツオ,_特徴).

識別困難(_系統1,_系統2) :-
    カツオ(_カツオ1),特徴(_カツオ1,_特徴1),系統(_カツオ1,西部太平洋系群),
    カツオ(_カツオ2),特徴(_カツオ2,_特徴2),系統(_カツオ2,中東部太平洋系群).

日本漁船の漁獲対象(_カツオ,西部太平洋群) :- カツオ(_カツオ),系統(_カツオ,西部太平洋系群).

70 :デフォルトの名無しさん:2010/05/24(月) 21:31:06
>>68

:- op(200,xf,cc).
:- op(200,xf,'L').

荷姿(1,'250cc',250 cc).
荷姿(2,'500cc',500 cc).
荷姿(3,'1L',1 'L').
荷姿(5,'12*250cc',12*250 cc).
荷姿(6,'12*1L',12*1 'L').
荷姿(7,'60*250cc',60*250 cc).

荷姿単位変換(1,'L',0.25).
荷姿単位変換(2,'L',0.5).
荷姿単位変換(3,'L',1.0).
荷姿単位変換(5,'L',3.0).
荷姿単位変換(6,'L',12.0).
荷姿単位変換(7,'L',15.0).
荷姿単位変換(1,'cc',250).
荷姿単位変換(2,'cc',500).
荷姿単位変換(3,'cc',1000).
荷姿単位変換(5,'cc',3000).
荷姿単位変換(6,'cc',12000).
荷姿単位変換(7,'cc',15000).

71 :デフォルトの名無しさん:2010/05/25(火) 04:11:19
<問題>
誤差の大きい(正確でない)情報を積極的に利用すること。
Prologに限らないが、プログラミングの仕様のほとんどが著作権を侵害している
可能性を持っている。多くの事実としての情報が本、雑誌など過去の著作物に
由来するからだ。そこで、この問題を回避するひとつの方法は正確でない情報を
積極的に利用することが考えられる。2010年5月24日の日本経済新聞朝刊の一面に
「時価総額630兆円減」という記事がある。この中に描かれた世界の株式時価総額と
いうグラフから 述語 'MSCI世界株価指数' と 述語 時価総額 を定義しなさい。

このグラフには(注)として、このグラフの情報が国際取引連盟(WFE),MSCIのデータを
もとに作成したものであることが記されているが、ここではこの原データは得られ
ないものとする。

72 :デフォルトの名無しさん:2010/05/25(火) 04:45:04
>>70

ケース売り(_荷姿ID) :- 荷姿(_荷姿ID,_,_*_ cc),!.
ケース売り(_荷姿ID) :- 荷姿(_荷姿ID,_,_*_ 'L'),!.

バラ売り(_荷姿ID) :- 荷姿(_荷姿ID,_,_量 cc),number(_量),!.
バラ売り(_荷姿ID) :- 荷姿(_荷姿ID,_,_量 'L'),number(_量),!.

% 第三引数に複合項を持ってきたことの弊害が顕れている。

73 :デフォルトの名無しさん:2010/05/25(火) 07:15:24
<問題>
文字列を解析して、拡大係数行列を得るProlog述語を定義しなさい。
ただし項は例えば、3 * (a ^ 2) は 3a2 のように表現されていることとする。

74 :デフォルトの名無しさん:2010/05/25(火) 07:39:21
<問題>
>>61>>55の仕様を十分に満たすものといえよう。しかし、>>59のヒントには、
さらに豊かな情報が含まれているが述語化する中で抜け落ちてしまっている。

この新人は大胆なストレート内傾ターンで途中転倒したにも拘らずすぐに起き上がりこのレースで
ワールドカップ初優勝を飾る。

の部分だ。このような核から外れているが実は貴重な情報をさりげなく
含ませる試みとして、>>61を書き直してください。

75 :デフォルトの名無しさん:2010/05/25(火) 13:10:33
>>71

時価総額('200801',54,兆円).
時価総額('200802',55,兆円).
時価総額('200803',52,兆円).
時価総額('200804',55,兆円).
時価総額('200805',54,兆円).
時価総額('200806',52,兆円).
時価総額('200807',50,兆円).
時価総額('200808',48,兆円).
時価総額('200809',43,兆円).
時価総額('200810',33,兆円).
時価総額('200811',32,兆円).
時価総額('200812',33,兆円).
時価総額('200901',32,兆円).
時価総額('200902',29,兆円).
時価総額('200903',30,兆円).
時価総額('200904',34,兆円).
時価総額('200905',37,兆円).
時価総額('200906',37,兆円).
時価総額('200907',41,兆円).
時価総額('200908',42,兆円).
時価総額('200909',44,兆円).
時価総額('200910',44,兆円).
時価総額('200911',46,兆円).
時価総額('200912',48,兆円).


76 :デフォルトの名無しさん:2010/05/25(火) 13:12:03
>>71 訂正

時価総額('200801',54,兆ドル).
時価総額('200802',55,兆ドル).
時価総額('200803',52,兆ドル).
時価総額('200804',55,兆ドル).
時価総額('200805',54,兆ドル).
時価総額('200806',52,兆ドル).
時価総額('200807',50,兆ドル).
時価総額('200808',48,兆ドル).
時価総額('200809',43,兆ドル).
時価総額('200810',33,兆ドル).
時価総額('200811',32,兆ドル).
時価総額('200812',33,兆ドル).
時価総額('200901',32,兆ドル).
時価総額('200902',29,兆ドル).
時価総額('200903',30,兆ドル).
時価総額('200904',34,兆ドル).
時価総額('200905',37,兆ドル).
時価総額('200906',37,兆ドル).
時価総額('200907',41,兆ドル).
時価総額('200908',42,兆ドル).
時価総額('200909',44,兆ドル).
時価総額('200910',44,兆ドル).
時価総額('200911',46,兆ドル).
時価総額('200912',48,兆ドル).

77 :デフォルトの名無しさん:2010/05/25(火) 13:12:56
>>71 つづき

時価総額('201001',47,兆ドル).
時価総額('201002',46,兆ドル).
時価総額('201003',49,兆ドル).
時価総額('201004',49,兆ドル).
時価総額('201005',44,兆ドル).

78 :デフォルトの名無しさん:2010/05/25(火) 14:02:55
>>71

日本経済新聞の紙面グラフから読み取った世界株式時価総額(_年月,_時価総額,_最大誤差,_単位) :-
        情報の最大誤差(2,_単位),
        時価総額(_年月,_時価総額,_単位).

情報の最大誤差(2,兆円).

79 :デフォルトの名無しさん:2010/05/25(火) 14:04:35
>>78 (>>71) ごめん訂正。

日本経済新聞の紙面グラフから読み取った世界株式時価総額(_年月,_時価総額,_最大誤差,_単位) :-
        情報の最大誤差(_最大誤差,_単位),
        時価総額(_年月,_時価総額,_単位).

情報の最大誤差(2,兆円).


80 :デフォルトの名無しさん:2010/05/25(火) 15:54:18
>>71

日本経済新聞の紙面グラフから読み取った世界株価指数(_年月,_世界株価指数,_最大誤差) :-
        世界株価指数(_年月,_世界株価指数),
        世界株価指数最大誤差(_最大誤差).

世界株価指数最大誤差(20).

日本経済新聞世界株価指数記事日付('20100524').

世界株価指数('200801',370).
世界株価指数('200803',360).
世界株価指数('200804',375).
世界株価指数('200805',385).
世界株価指数('200806',355).
世界株価指数('200807',340).
世界株価指数('200808',320).
世界株価指数('200809',300).
世界株価指数('200810',275).
世界株価指数('200811',225).
世界株価指数('200812',220).

81 :デフォルトの名無しさん:2010/05/25(火) 15:55:29
>>71 つづき

世界株価指数('200901',230).
世界株価指数('200902',210).
世界株価指数('200903',190).
世界株価指数('200904',200).
世界株価指数('200905',225).
世界株価指数('200906',240).
世界株価指数('200907',240).
世界株価指数('200908',285).
世界株価指数('200909',285).
世界株価指数('200910',295).
世界株価指数('200911',290,).
世界株価指数('200912',285).
世界株価指数('201001',295).
世界株価指数('201002',305).
世界株価指数('201003',305).
世界株価指数('201004',290).
世界株価指数('201005',270).

82 :デフォルトの名無しさん:2010/05/27(木) 04:34:59
<問題>
いろんな言語で宿題 第四編@プログラム板
http://pc12.2ch.net/test/read.cgi/tech/1268003943/472
三目ならびの述語 勝ちパターン/1 のソースプログラムを生成する述語を定義しなさい。

83 :デフォルトの名無しさん:2010/05/27(木) 04:37:13
>>82
三目ならび -> 三目ならべ

84 :デフォルトの名無しさん:2010/06/02(水) 12:08:10
>>74

'1971年',バルディゼール,大回転,'エリック・ホーケル(ハーカー)',新人,初優勝,大胆な,ストレート内傾ターン,転倒,
起き上がる,ワールドカップ初優勝

このくらいの要素の組み合わせで単位節を構成すればいいのかな?
ここの一節が札幌オリンピックの二本目を暗示してるのだとしたら、それはどう表現するのだろう。


85 :デフォルトの名無しさん:2010/06/04(金) 09:28:52
<問題>
与えられた文字列に含まれる整数を表す副文字列の中で最長のものを取り出しなさい。

86 :デフォルトの名無しさん:2010/06/04(金) 09:31:17
<問題>
与えられた文字列に含まれる数値文字列で1.0-49.0(整数であってもよい)の
範囲の数値文字列を取り出しなさい。

87 :デフォルトの名無しさん:2010/06/04(金) 18:40:14
>>85
% Prolog 小数文字列の排除を考慮しなければもっとすっきりするのだが。

与えられた文字列に含まれる整数を表す副文字列の中で最長のものを取り出す(_文字列,_整数を表す副文字列の中で最長の文字列) :-
    atom_chars(_文字列,Chars),
    与えられた文字列に含まれる整数を表す副文字列ならび(Chars,_副文字列とその長さならび),
    findmax(_文字列長,(member([_,_文字列長],_副文字列とその長さならび),_文字列長>0),_最長文字列長),
    member([_整数を表す副文字列の中で最長の文字列,_最長文字列長],_副文字列とその長さならび).

与えられた文字列に含まれる整数を表す副文字列ならび(Chars,[[_副文字列,_文字列長]|R2]) :-
    append(_,[A|R],Chars),
    A @>= '0',
    A @=< '9',
    先頭から整数を表す副文字列を切り出す([A|R],_副文字列,_残りならび),
    文字列長(_副文字列,_文字列長),
    与えられた文字列に含まれる整数を表す副文字列ならび(_残りならび,R2).
与えられた文字列に含まれる整数を表す副文字列ならび(_,[]).

先頭から整数を表す副文字列を切り出す(Chars,'',[B|R2]) :-
    append(L1,['.'|R],Chars),
    R=[A|R2],
    A @>= '0',
    A @=< '9',!,
    append(_,[B|R2],R),
    \+((B @>= '0',B @=< '9')).
先頭から整数を表す副文字列を切り出す(Chars,_副文字列,[A|R]) :-
    append(L1,[A|R],Chars),
    \+((A @>= '0',A @=< '9')),
    concat_atom(Chars,_副文字列),!.
先頭から整数を表す副文字列を切り出す(Chars,_副文字列,[]) :- concat_atom(Chars,_副文字列).



88 :デフォルトの名無しさん:2010/06/05(土) 12:54:39
>>86
% Prolog

'与えられた文字列に含まれる数値文字列で1.0-49.0(整数であってもよい)の範囲の数値文字列を取り出す'(_文字列,_副文字列) :-
    atom_chars(_文字列,Chars),
    数値ならびを切り出す(Chars,L,_),
    number_chars(V,L),
    V >= 1.0,V =< 49.0,
    concat_atom(L,_副文字列).
'与えられた文字列に含まれる数値文字列で1.0-49.0(整数であってもよい)の範囲の数値文字列を取り出す'(_文字列,_副文字列) :-
    atom_chars(_文字列,Chars),
    数値ならびを切り出す(Chars,L,_残りならび),
    concat_atom(_残りならび,L3),
    '与えられた文字列に含まれる数値文字列で1.0-49.0(整数であってもよい)の範囲の数値文字列を取り出す'(L3,_副文字列).

数値ならびを切り出す(Chars,L,_残りならび) :-
    先頭が数値文字であるならびを切り出す(Chars,L1),
    ひとつだけピリオドを含む数値文字ならびを切り取る(L1,L,_残りならび),!.

先頭が数値文字であるならびを切り出す(Chars,[A|R]) :- append(L0,[A|R],Chars),A @>= '0',A @=< '9',!.

一つだけピリオドを含む数値文字ならびを切り取る([],[],[]) :- !.
一つだけピリオドを含む数値文字ならびを切り取る(['.'|R1],['.'|R2],R3) :- すべてが数値文字のならびを切り取る(R1,R2,R3),\+(R2=[]),!.
一つだけピリオドを含む数値文字ならびを切り取る(['.'|R1],[],['.'|R1]) :- !.
一つだけピリオドを含む数値文字ならびを切り取る([A|R1],[],[A|R1]) :- \+((A @>= '0',A @=< '9')),!.
一つだけピリオドを含む数値文字ならびを切り取る(['.'|R1],['.'|R2],R3) :- すべてが数値文字のならびを切り取る(R1,R2,R3),!.
一つだけピリオドを含む数値文字ならびを切り取る([A|R1],[A|R2],R3) :- A @>= '0',A @=< '9',一つだけピリオドを含む数値文字ならび(R1,R2,R3).

89 :デフォルトの名無しさん:2010/06/05(土) 17:58:44
>>46
% Prolog

蛾(ごまだらきこけが,ひとりが科).
開帳(ごまだらきこけが,成虫,'23~32mm').
色(ごまだらきこけが,成虫,体と翅,赤味がかった黄色).
斑点(ごまだらきこけが,成虫,体と翅,前翅,'15個').
分布(ごまだらきこけが,本邦広くアジアにひろがっている).
食性(ごまだらきこけが,幼虫,コケ類).
長い毛(ごまだらきこけが,幼虫).
青い点(ごまだらきこけが,幼虫,背中に2列).
色(ごまだらきこけが,幼虫,灰色).


90 :デフォルトの名無しさん:2010/06/05(土) 19:41:39
>>46
% Prolog

(_ごまだらきこけが,ひとりが科) :- ごまだらきこけが(_ごまだらきこけが).
開帳(_ごまだらきこけが,成虫,'23~32mm') :- ごまだらきこけが(_ごまだらきこけが).
色(_ごまだらきこけが,成虫,体と翅,赤味がかった黄色) :- ごまだらきこけが(_ごまだらきこけが).
斑点(_ごまだらきこけが,成虫,体と翅,前翅,'15個') :- ごまだらきこけが(_ごまだらきこけが).
分布(_ごまだらきこけが,本邦広くアジアにひろがっている) :- ごまだらきこけが(_ごまだらきこけが).
食性(_ごまだらきこけが,幼虫,コケ類) :- ごまだらきこけが(_ごまだらきこけが).
長い毛(_ごまだらきこけが,幼虫) :- ごまだらきこけが(_ごまだらきこけが).
青い点(_ごまだらきこけが,幼虫,背中に2列) :- ごまだらきこけが(_ごまだらきこけが).
色(_ごまだらきこけが,幼虫,灰色) :- ごまだらきこけが(_ごまだらきこけが).


91 :デフォルトの名無しさん:2010/06/05(土) 19:44:04
>>46
% Prolog 書き直し

蛾(_ごまだらきこけが,ひとりが科) :- ごまだらきこけが(_ごまだらきこけが).
開帳(_ごまだらきこけが,成虫,'23~32mm') :- ごまだらきこけが(_ごまだらきこけが).
色(_ごまだらきこけが,成虫,体と翅,赤味がかった黄色) :- ごまだらきこけが(_ごまだらきこけが).
斑点(_ごまだらきこけが,成虫,体と翅,前翅,'15個') :- ごまだらきこけが(_ごまだらきこけが).
分布(_ごまだらきこけが,本邦広くアジアにひろがっている) :- ごまだらきこけが(_ごまだらきこけが).
食性(_ごまだらきこけが,幼虫,コケ類) :- ごまだらきこけが(_ごまだらきこけが).
長い毛(_ごまだらきこけが,幼虫) :- ごまだらきこけが(_ごまだらきこけが).
青い点(_ごまだらきこけが,幼虫,背中に2列) :- ごまだらきこけが(_ごまだらきこけが).
色(_ごまだらきこけが,幼虫,灰色) :- ごまだらきこけが(_ごまだらきこけが).

92 :デフォルトの名無しさん:2010/06/05(土) 19:49:08
>>91 たとえば、
あるものの幼虫はコケ類を食べる。そういうあるもののひとつは、ごまだらきこけがだ。

と読めばよいと思う。

93 :デフォルトの名無しさん:2010/06/05(土) 20:53:07
出題者ではありませんが、勝手に批評します。

>>89
同じ項構造で他の生物にも適用できるよう、項: 蛾/2 は以下の方が
命題として適切ではないかと考えます。

 種(ごまだらきこけが, 蛾). % ごまだらきこけがの種は蛾である。
 科(ごまだらきこけが, ひとりが). % ごまだらきこけがの科はひとりがである。

項: 色/2 と 色/3 で混在していますが、どちらかに統一すべきだと考えます。

 色(ごまだらきこけが, 成虫の体と翅, 赤味がかった黄色).
 色(ごまだらきこけが, 幼虫, 灰色).

または

 色(ごまだらきこけが, 成虫, 体と翅, 赤味がかった黄色).
 色(ごまだらきこけが, 幼虫, 全体, 灰色).

>>90
ごまだらきこけが以外の蛾も多数登録されているものとして、
食性について問い合わせる場合を考えます。

 ?- 食性(_蛾, _, コケ類) % コケ類を食べる蛾は何か?
 _蛾=ごまだらきこけが

>>90では、変数 _蛾 がアトムにならず変数のままですから、この問い合わせには
回答できていません。従って、解答としては>>89のほうが適切ではないかと考えます。

94 :93:2010/06/05(土) 21:23:38
>>93を自己訂正

>項: 色/3 と 色/4 で混在していますが、どちらかに統一すべきだと考えます。
>
> 色(ごまだらきこけが, 成虫の体と翅, 赤味がかった黄色). % 色/3 で統一
> 色(ごまだらきこけが, 幼虫, 灰色).
>
>または
>
> 色(ごまだらきこけが, 成虫, 体と翅, 赤味がかった黄色). % 色/4 で統一
> 色(ごまだらきこけが, 幼虫, 全体, 灰色).


95 :デフォルトの名無しさん:2010/06/05(土) 22:14:49
>>93
適切な批評をいただき感謝します。
色のアリティが二種類になっているのは好ましくないですね。
種、科については、可能な限り、仕様(ここでは問題文)の文面から
述語名や変数名を拾うことを旨としているので、出てきませんでした。
とはいえ、私も「食べる」を「食性」に置き換えたりしていますが、
言語、概念による補強は必要だし、そうすることで述語として「強く」
なることも事実ですね。
>>90については、途中で端折りますが、以下のようなら自然でしょうか。
ごまだらきこけが(_ごまだらきこけが) :-
    色(_ごまだらきこけが,幼虫,全体,灰色),
    色(_ごまだらきこけが,成虫,赤味がかった黄色).

色(ごまだらきこけが,幼虫,全体,灰色),
色(ごまだらきこけが,成虫,赤味がかった黄色).
食性(ごまだらきこけが,幼虫,コケ類).

96 :93:2010/06/05(土) 23:11:54
>>95
>>>90については、途中で端折りますが、以下のようなら自然でしょうか。

いいえ、不自然です。この問題(仕様)はすべてファクト(事実)から構成されています。
出題者の意図(文脈)は知りませんが、単純なのにわざわざ複雑なルール(推論)を組み込むのは、
解答として適切であるとは思えません。

もし納得できないようでしたら、いったんPrologプログラミングから離れて
数学の命題論理(初等数理論理学の一部)を勉強されることをお勧めします。

97 :デフォルトの名無しさん:2010/06/06(日) 13:11:46
本質に迫るツッコミktkr

98 :デフォルトの名無しさん:2010/06/06(日) 16:58:56
>>96
確かに。命題論理の勉強をします。カツオの定義など支離滅裂ですね。

私はPrologの核は単位節データベースであって、実際宿題スレでもデータベース板SQLの質問から
多数問題を採用してきました。一方、
このスレと「いろんな言語で宿題」スレに共通して、

親子(為義,義朝).
親子(義朝,頼朝).
先祖(A,B) :- 親子(A,B).
先祖(A,B) :- 親子(A,C),先祖(C,B).

という定義に於いて、先祖/2はルールなのに、親子/2はなぜ事実なの?親子もルールで
書いていくとどうなるの?という疑問に対して、何らかの答えだすという試みもして
きました。
よく分かっていないことは事実とせず、これからそれについてはルールが来るのだ、
今のところまだ未定義だけどね、というのが指摘いただいた箇所の意図であり、
奇妙な表現に拘る言い訳ということになります。

99 :93:2010/06/06(日) 21:12:22
>>98
Prologの単位節は「関係の存在」というファクト(事実)を表現しています。
以下は源一族の家系の一部をファクトだけで表現した一例(の一部)です。

 親_子(為義, 義朝). % 為義と義朝の間には親-子という関係が存在する。
 先祖_子孫(為義, 頼朝). % 為義と義朝の間には先祖-子孫という関係が存在する。

家系が「ファクトだけで表現できる」のが分かるかと思います。
同様にごまだらきこけが(あるいは蛾という生物系)についてもファクトだけで表現できます。
ですから、単位節だけで表現できる課題(仕様)については、それだけで解答すべきであると考えます。

また、複数のファクトから新たな「関係の存在」を表現したのがルール(規則)です。

 先祖_子孫(A, B) :- 親_子(A, B).
  % ある人物AとBについて、AとBの間に親-子という関係が存在するならば、
  % AとBの間には先祖-子孫という関係が存在する。
 先祖_子孫(A, B) :- 親_子(A, C), 親_子(C, B),.
  % ある人物AとBとCについて、AとCの間に親-子という関係が存在し、かつCとBの間に
  % 親-子という関係が存在するならば、AとBの間には先祖-子孫という関係が存在する。

ファクト(事実)とルール(規則)は、どちらも「関係の存在」を表現しています。
Prologで記述した場合、その項の名前は関係の名前を指します。
ここで、>>90,91,95における項「ごまだらきこけが(_)」について、

 **** ごまだらきこけがは関係ではありません!! ****

ですから、これらの解答は明らかに不自然です。

100 :93:2010/06/07(月) 00:50:12
>>99に間違いがあったので、訂正します。

> 先祖_子孫(A, B) :- 親_子(A, C), 先祖_子孫(C, B),.
>  % ある人物AとBとCについて、AとCの間に親-子という関係が存在し、かつCとBの間に
>  % 先祖-子孫という関係が存在するならば、AとBの間には先祖-子孫という関係が存在する。


101 :デフォルトの名無しさん:2010/06/07(月) 08:46:50
>>95
こんな定義ならどうなんだ。

確信度(_ごまだらきこけが,ごまだらきこけが,60) :-
    色(_ごまだらきこけが,_,幼虫,全体,灰色),
    色(_ごまだらきこけが,_,成虫,赤味がかった黄色),
    食性(_ごまだらきこけが,_,幼虫,コケ類).

色(_,ごまだらきこけが,幼虫,全体,灰色),
色(_,ごまだらきこけが,成虫,赤味がかった黄色).
食性(_,ごまだらきこけが,幼虫,コケ類).


102 :デフォルトの名無しさん:2010/06/07(月) 08:54:28
>>99
それから、>>95 のごまだらきこけが は関係ではなく、クラスを表現しようとしているのではないかな。


103 :93:2010/06/07(月) 17:19:35
あまり頭ごなしに不自然だ!!ばかりを言うのもアレなので....。

>>98
>先祖/2はルールなのに、親子/2はなぜ事実なの?
>親子もルールで書いていくとどうなるの?という疑問に対して、
>何らかの答えだすという試みもしてきました。

「親-子」という関係は原始的な(これ以上は分解できない)ファクトだから、
ルールとして書くことは(私には)無理ですが、「親-子の関係」や「先祖-子孫の関係」という
関係そのものを扱えるファクト/ルールを書くことは可能です。たとえば
「AとBにはどんな関係があるか?(= AとBとの間に存在する関係は何か?)」という
問い合わせに答えることの可能な知識ベースです。

まず説明の前に、>>99では

 ファクトとルールは、どちらも「関係の存在」を表現している

と書きました。それを以下のように訂正します。

 ファクトとルールは、どちらも「エンティティ(物)の存在」あるいは
 「エンティティ間にある関係の存在」を表現している

エンティティとは関係の対象となるオブジェクトを意味し、
たとえば「ごまだらきこけが」や「為義」を指します。

(長いので続く)

104 :93:2010/06/07(月) 17:21:16
(>>103の続き)

では、以降からは知識ベースの記述を始めます。まず基礎のファクトを書きます。

 人物(為義).      % 為義という人物が存在する。
 人物(義朝).      % 義朝という人物が存在する。
 人物(頼朝).      % 頼朝という人物が存在する。

ここで、「親-子」と「先祖-子孫」を(関係ではなく)エンティティとして認識した上で、
ファクトとして書いてみます。

 関係(親_子).       % 親-子という関係が存在する。
 関係(先祖_子孫).     % 先祖-子孫という関係が存在する。
 関係(親_子, 為義, 義朝). % 為義と義朝の間には親-子という関係が存在する。
 関係(親_子, 義朝, 頼朝). % 義朝と頼朝の間には親-子という関係が存在する。

これらファクトを前提にルールを書きます。

 関係(先祖_子孫, A, B) :- 人物(A), 人物(B), A¥=B, 関係(親_子, A, B).
  % あるA, Bについて、AおよびBという人物が存在し、
  % かつAとBの間に親-子という関係が存在するならば、
  % AとBの間には先祖-子孫という関係が存在する。

 関係(先祖_子孫, A, B) :-
    人物(A), 人物(B), 人物(C), A ¥= B, B ¥= C, A ¥= C,
    関係(親_子, A, C), 関係(先祖_子孫, C, B).
  % あるA, Bについて、A、BおよびCという人物が存在し、
  % かつAとCの間に親-子という関係が存在し、
  % かつCとBの間に先祖-子孫という関係が存在するならば、
  % AとBの間にも先祖-子孫という関係が存在する。

(まだ続く)

105 :93:2010/06/07(月) 17:33:51
(>>104の続き)

以下は、SWI-Prologでの実行例です。

 為義と義朝は親子か?
  ?- 関係(親_子, 為義, 義朝).
  true .  % はい。

 為義の子は誰か?
  ?- 関係(親_子, 為義, X).
  X = '義朝' ;  % 義朝です。
  false.

 為義の子孫は誰か?
  ?- 関係(先祖_子孫, 為義, X).
  X = '義朝' ;
  X = '頼朝' ;  % 義朝と頼朝です。
  false.

 為義と義朝にはどんな関係があるか?
  ?- 関係(R, 為義, 義朝).
  R = '親_子' ;
  R = '先祖_子孫' ;  % 親-子と先祖-子孫という関係があります。
  false.

 為義と頼朝にはどんな関係があるか?
  ?- 関係(R, 義朝, 頼朝).
  R = '先祖_子孫' ;  % 先祖-子孫という関係があります。
  false.

(まだ続く。次で終わり。)

106 :93:2010/06/07(月) 17:36:21
(>>105の続き)

 すべての関係を挙げよ。
  ?- 関係(R, A, B).
  R = '親_子',
  A = '為義',
  B = '義朝' ;  % 為義と義朝の間に親-子という関係が存在する。
  R = '親_子',
  A = '義朝',
  B = '頼朝' ;  % 為義と頼朝の間に親-子という関係が存在する。
  R = '先祖_子孫',
  A = '為義',
  B = '義朝' ;  % 為義と頼朝の間に先祖-子孫という関係が存在する。
  R = '先祖_子孫',
  A = '義朝',
  B = '頼朝' ;  % 義朝と頼朝の間に先祖-子孫という関係が存在する。
  R = '先祖_子孫',
  A = '為義',
  B = '頼朝' ;  % 為義と頼朝の間に先祖-子孫という関係が存在する。
  false.

(これで終わり。長レス失礼。)

107 :93:2010/06/07(月) 18:08:39
>>102
では、オブジェクト指向(あるいはフレーム理論やオントロジーのような)知識を一般化する
枠組み(フレームワーク)を>>103-106で書いた知識ベースに導入してみます。

 オブジェクト(昆虫).       % 昆虫はオブジェクトである。
 オブジェクト(蛾).        % 蛾はオブジェクトである。
 オブジェクト(ごまだらきこけが). % ごまだらきこけがはオブジェクトである。

 関係(スーパークラス_サブクラス, 昆虫, 蛾).    % 蛾は昆虫のサブクラスである。
 関係(クラス_インスタンス, 蛾, ごまだらきこけが). % ごまだらきこけがは蛾のインスタンスである。

オブジェクト指向という枠組みの導入によって、これまで「....が存在する」と解釈していたのを、
「....である」という解釈に進化させたことに注目してください。

オブジェクト指向におけるクラスという概念は「スーパークラス-サブクラス」および
「クラス-インスタンス」という関係で表現できます。これらはそれぞれ「is-a関係(またはkind-of関係)」と
「instance-of関係」と呼ばれることもあり、知識表現レベルではどちらも関係の特別なケース(クラス)です。

以上のように、(源氏の)家系や(蛾の)体系といった比較的単純な知識表現であれば、明解な解答が得られます。
不自然な解釈や小賢しい技法(テクニック)は必要ありません。命題論理と一階述語論理の守備範囲です。

108 :デフォルトの名無しさん:2010/06/18(金) 07:09:51
"いろんな言語で宿題 第四編"は15日夕方512k超えで終了しました。
その後、第五編を立てることができません。
15日の夜以降、追加または変更があったものについては、以下のアーカイブを参照してください。

http://nojiriko.asia/prolog/c136_844.html
http://nojiriko.asia/prolog/c136_847.html
http://nojiriko.asia/prolog/c136_863.html
http://nojiriko.asia/prolog/c136_874.html
http://nojiriko.asia/prolog/c136_880_1.html
http://nojiriko.asia/prolog/c136_880_2.html
http://nojiriko.asia/prolog/c136_880_3.html
http://nojiriko.asia/prolog/c136_880_4.html
http://nojiriko.asia/prolog/c136_892.html
http://nojiriko.asia/prolog/c136_899_1.html
http://nojiriko.asia/prolog/c136_899_2.html
http://nojiriko.asia/prolog/c136_904.html
http://nojiriko.asia/prolog/c136_918.html
http://nojiriko.asia/prolog/j69_157.html
http://nojiriko.asia/prolog/sql10_154.html
http://nojiriko.asia/prolog/sql9_944.html

ファイル名で問題の出所はわかると思います。


109 :デフォルトの名無しさん:2010/06/18(金) 07:48:11
>>108
http://ime.nu/nojiriko.asia/prolog/c136_899_1.html
http://ime.nu/nojiriko.asia/prolog/c136_899_2.html
は未回答でした



110 :デフォルトの名無しさん:2010/06/25(金) 10:54:49
<問題>
「不意に辿り着いてしまった」と感じる検索事例を定義しなさい。


61 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)