2017-02-05 7 views
1

私はPrologの基本プロジェクトに取り組んでいます。私は、入力リストに基づいて数値を返す関数を記述したいと思います。私はまた、入力リストが空の場合、結果が偽であることを確認したい。 関数は次のようになります parseList(List、N)ここで、Nは数値です。私が試してみると、Falseを返す方法を知りたいです。条件がプロローグでfalseを返す場合

parseList([], N). 

ここでNは任意の数値です。

私はしかし、これは動作するようには思えない基本ケース

parseList([], False). 

のためにこれをやってみました。

誰でも私に手伝ってください。ありがとうございました!

+0

Prologで 'false'の値を返すことはありません。与えられた引数で成功できない場合、述語は失敗します(結果は 'false')。したがって、空のリストをサポートする述語句がないと自動的に失敗します。あなたのコードから 'parseList([]、N)'をそのまま残してください。 – lurker

+0

しかし、述語をサポートするための基本ケースは存在しないはずです。リストが空でないときの述語の停止ポイント? – therealdev

+0

あなたのベースケースは空のリストを扱う必要はありません。例えば、*、 'parseList([X]、N): - ...'ならば、あなたの再帰的なケースは2つ以上の要素を扱うことができます。 'parseList([X、Y | T]、 N): - ... '。 – lurker

答えて

1

Lurkerがコメントしたように、この例では、空のリスト条件を省略して1つの要素のリストを処理すると、空のリストが失敗することになります。しかし、より一般的なケースでは、失敗するルールを宣言したい場合は、それが真実でない可能性があるため、falseを含めるか、同じを実行するfailを含めるだけです。例えば:

parseList([],_) :- false. 

又は(廃止)

parseList([],_) :- fail. 

_は重要でない変数を示すために使用され、そうでなければ、シングルトン - 可変警告がトリガーされます)。

+0

'false/0'はより良い選択であり、最近のISO標準の追加です。これは' true/0'のより明白な反対です。 'fail/0'は' succeed/0'の反対です。これはまったく利用できません。 – mat

関連する問題