2017-03-21 11 views
2

この関数の目的は、リストXに0または1のみが含まれていることを確認することです。Prologでリストのドメインを制限するins 0..1を使用する

私たちは、リストのドメインを宣言するためにinsを使用するように言われました。

verifyLinesという述語があります。ここで、Hは制約のリストで、Xは行を表すリストです。制約は、互いに続くことができる1の数を検証します。たとえば、Hに番号3が含まれている場合、Xはリストのある時点で1,1,1を含む必要があります。問題は、私たちが既にそれを行う人のvalid_seqという述語を既に作成しているので、それらの制約の検証ではありません。私たちの問題は、Xのリストに0または1しかないことを確認する必要があるということです。これは適切な方法ですか?このように使用すると、演算子が見つからないというエラーが出るようです。

verifylines(H, X) :- 
    X ins 0..1, 
    valid_seq(H, X). 

編集: SWI-Prologでエラー
AERROR X:/bureau/tp2_projet2.pl:4:2:構文エラー:演算子は、予想

X ins 0..1,を有するものである4行目

私は現在のverifylines()の上にuse_module(library(clpfd)).を追加しましたが、エラーメッセージに影響していないようです...私が間違っていることを確認していない、私はプロローグのライブラリの使い方にも慣れていません。

答えて

1

「リストXのすべての要素が0または1です」と言う場合は、X ins 0..1というだけです。

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

?- X = [A,B,C], X ins 0..1. 
X = [A, B, C], 
A in 0..1, 
B in 0..1, 
C in 0..1. 

おそらくuse_module(library(clpfd))を忘れていますか?

?- X = [A,B,C], X ins 0..1. 
ERROR: Syntax error: Operator expected 
ERROR: X = [A,B,C], X 
ERROR: ** here ** 
ERROR: ins 0..1 . 

が、本当にあなたの問題と例プログラムのより良い説明を入れて、あなたのエラーがどのように見えるし、すべてのそれらの事はせずに問題を再現することを可能にしているかを示す必要があります:私は、ないときので、私は取得します推測は、推測がより困難なので、右か?

プログラムやコードの他の部分がなく、インタプリタのやりとりだけでエラーを表示するために必要なものをどのように配置すればよいのでしょうか?コンピュータ上で同じことを試すことができるように、少なくとも私はそれを見るように問題を再現できることを知っています、そして、あなたができなければ、それはより難しくなります。しかし、すべてを見せても、通常はそれほど難しくありません。また、あなたの質問には、述語への呼び出しが含まれていますが、定義が含まれていないため、定義を持たないため、できるだけ表示したプログラムを誰も実行できません。

+0

正確に何が問題であるかを理解するのに役立ついくつかの情報を質問に追加しました。それを調べていただきありがとうございます。 –

+1

@ Simon-PierreDesjardinsソースファイル 'example.pl'に置くと、': - use_module(...) 'や'? - use_module(...)。 '。あなたはドキュメントを読むことができますか? –

関連する問題