FAQ (Frequently Asked Questions)


過去の質問集

ここでは過去に寄せられた質問を載せています.
(2005年度まではQuintus-Prologを使用していました.SWI-Prologにおいて同様に動作するとは限りません.)

【質問】オペレータ記法で新しいオペレータをop指令で指定するとき、
	順位のレンジはどの程度なのでしょうか?
		(by 07117935 副島 大和  1997年5月7日)

【回答】オンラインマニュアルに載っていました。自分で質問して自分で
	フォローするなんて最低な気がしますが、一応答を。

	Each operator has a precedence, which is a number from 1 to 1200.

	と、マニュアルにあります。ちなみにこの Each operator とは、
	マニュアルを読み進めれば分かりますが、本当に全てのオペレータ
	が、その対象になっています。即ち、自分で指定したものでなく、
	システム組み込みのものでも、暗に優先順位を持っているという
	ことです。詳細はオンラインマニュアルを見て下さい。
	(Prologを起動して ?- manual(g-1-4-4). で優先順位(一部?)が見れます。)
	その他、何か分かりましたらフォローをしておいて下さい。
		(by 07117935 副島 大和  1997年5月7日)


【質問】何故か qui を実行すると Segmentation fault qui (core dumped) とエラーが出て実 行できません。qui を実行できない人と実行できる人がいる ようです。どうしてでしょう? (by ???????? 匿名希望 1997年5月29日) 【回答】昨年の4月に OSのアップグレードの時にQuintusProlog のアッ プグレードも行なわれました。path の設定を /opt/Quintus_Prolog/bin3.1.4/sun4-5 から /opt/quintus/bin3.2/sun4-5 に変更してください。qui を実行できます。 ついでに環境変数 MANPATH の設定を /opt/Quintus_Prolog/generic/q3.1.4/man から /opt/quintus/generic/q3.2/man に変更して下さい。 (by ???????? 匿名希望 1997年5月30日)
【質問】自宅でSWI-Prologの処理系に、プリント41ページFigure 2.4の プログラムを打ち込んでもnumberの処理がうまく動きません。 どうしたらいいでしょうか? (by 07117964 山根 晃 1997年6月26日) 【回答】SWI-PrologはフリーなProlog処理系です。Linux,Solaris, Win3.1,Win95などで動く処理系が配布されていることは 確認しています(ftp://swi.psy.una.nl/pub/SWI-Prolog/linux)。 FreeBSD用のパッケージはまだ確認していません。 また、Linux版のパッケージは/icsserv/home1/e/share/prolog/swi/linux/ 以下にドキュメントとともに置いてあります。全パッケージの容量は 620KB程度です。FTPでフロッピーに落して、自宅でPrologの課題を することもできます。 ...話が脱線してしまいました。本題に戻りましょう。 "0" は数字「0」の文字コードとして処理されますが、 実際には[48]といった形で表現されています。 Fig. 2.4 :DCGを用いた数式の構文解析プログラムの最終行 number(X) --> [C],{"0"=<C,C=<"9",X is .... } ^^^^^^^^^^^^^^^^^^^^^^^ 一番最後の行で、文字コードから、数値に変換している部分 (^^^^ 部分)がありますが、この文字コード表記に問題が潜んでいます。 SWI-PrologやQuintus Prologではこの部分を{[48]=< C, C=<[57], ... とみなします。Quintusのほうでは、[48]=<49 という問い合わせに対して yesと答えてくれますが、SWIはこの形式ではNoと答えます。 これを解決するには、Figure 2.4の最終行を、 number(X) --> [C],{"0"=<C, C=<"9", X is C-"0"}. から、 number(X) --> [C],{ 48=<C, C=<57 , X is C-48 }. と文字コードで直接書き直せば、 Quintus,SWIのどちらでもうまくいくはずです。 (by 07117964 山根 晃 1997年6月27日)