2

今回は、エラーを本当に理解できません。特定の位置にあるリスト要素を取得するために、このコードを記述しました。

take_pos([], _, _) :- fail;
take_pos([H|T], 1, H).
take_pos([H|T], Pos, X) :- Pos2 is Pos - 1, take_pos(T, Pos2, X).

終了することはありません。それをトレースすると、2番目のステートメントと一致しないことがわかります。また、クエリを実行take_pos([1,2,3], 1, 1).すると、最後のものと一致します。

私は何が欠けていますか?

4

2 に答える 2

1

問題は、の後にドットではなくセミコロンを付けることだと思いますfail

シングルトンの導入を避けるために、2番目のルールを書き直すことも検討してください。

take_pos([], _, _) :- fail.
take_pos([H|_], 1, H).
take_pos([H|T], Pos, X) :- Pos2 is Pos - 1, take_pos(T, Pos2, X).
于 2012-08-29T19:27:39.247 に答える
1

あなたの問題は、最初の節に;あなたが意味したと思うところがあるということ.です。とにかく、修正された場合、その最初の句は何もしないので、完全に削除する必要があります。

take_pos([H|T], 1, H).
take_pos([H|T], Pos, X) :- Pos2 is Pos - 1, take_pos(T, Pos2, X).
于 2012-08-29T19:32:23.000 に答える