11

私はSWI-Prologで制約プログラミングを理解しようとしています。このチュートリアルを見てください:http://en.wikibooks.org/wiki/Prolog/Constraint_Logic_Programming

しかし、私は最初のハードルに落ちているようです。

?- use_module(library(clpfd)).
true.

?- X #> Y, X in 1..3, Y=2.
ERROR: Syntax error: Operator expected
ERROR: X 
ERROR: ** here **
ERROR: #> Y, X in 1..3, Y=2 . 
?- 

ここで何が問題になっていますか?ライブラリを含めたようですが、チュートリアルの最初の例の行で構文エラーがスローされます。

私が見つけることができるすべてのチュートリアルは、#=、#<などの演算子を使用しているようです。しかし、私のSWI-Prologはそれらを嘲笑します。それらは、その制約ライブラリに付属する追加の構文ですか?(そして私はそれをロードするのに失敗していますか?)

または、チュートリアルの例を読み間違えていますか?

更新:以下のHorshの返信から物事を理解しようとしています。ライブラリを使用してインタラクティブターミナルで回線を実行すると、これを機能させることができます。しかし、ライブラリをインポートしてこれらの演算子をソースファイルで使用しようとすると、エラーが再度スローされます。何がわからないの?

アップデート2:

わかった。ソースファイルでライブラリを呼び出してから、#>を含むルールを記述した場合。次に、コマンドラインから参照してみます。エラーがスローされ、#>構文が認識されません。プログラムを参照する前にライブラリをコマンドラインにインポートすると、機能します。これは正しいでしょうか?

4

3 に答える 3

13

Horsh の回答に基づいて、ライブラリをソース コードにインポートする必要があります。?-次のように行の先頭に置くことを忘れないでください。

?- use_module(library(clpfd)).

?-、SWI-Prolog に、プログラムで述語として宣言しようとする代わりに、インタープリターに直接入力されたかのように行を実行するように指示します。

SWI-Prolog がライブラリを複数回インポートすることについて心配する必要はありません。ライブラリが変更されたかどうかを確認し、最後にロードされてからライブラリが変更された場合にのみ再ロードします。

于 2011-04-10T08:15:49.083 に答える
9

将来これを見つけた人のために、SWI-Prolog ソース ファイルにライブラリをインポートする場合は、次の方法でも機能します。

:- use_module(library(clpfd)).

:-と ではないことに注意してください?-

于 2012-03-05T06:12:10.477 に答える
-1

マニュアルのあちこちにすべて記載されてます。

?- [library(clpfd)].
%   library(error) compiled into error 0.00 sec, 10,128 bytes
%  library(apply) compiled into apply 0.00 sec, 16,840 bytes
%  library(assoc) compiled into assoc 0.00 sec, 13,132 bytes
%  library(lists) compiled into lists 0.00 sec, 14,332 bytes
%  library(pairs) compiled into pairs 0.00 sec, 5,372 bytes
% library(clpfd) compiled into clpfd 0.05 sec, 392,604 bytes
true.

?- X #> Y, X in 1..3, Y=2.
X = 3,
Y = 2.
于 2011-04-08T12:59:42.567 に答える