3

私はそうで、私が取り組んでいるものであるProlog、特にSWI-Prologに慣れていません。私はタイトルが示すようにしようとしています.SWIライブラリに含まれていたいくつかの方法を使用して、1ベースのリスト(ゼロではなく1から始まる)で動作するようになりました. これは私のコードです:

indexof(I,E,L):-
   nth1(I,L,E).
   indexof(-1,_,_).

私の割り当て(はい、hw - _ -)はこれを行うことですが、0ベースのカウントとして、最後の行に追加しようとしましたが、IはI - 1ですが、エラーが発生し続けました。それを0ベースのカウントにする他の方法はありますか?

このindexof(A、a、[w、x、y、z、a])の場合。私は4を取得する必要がありますが、5を取得しています.

4

2 に答える 2

2

SWI-Prologにはnth0/3あります。これはnth1/3と同じですが、インデックスは0から始まります。

元のアプローチを機能させるには、次のようなものが必要です。

indexof(I,E,L) :-
    nth1(I1,L,E),
    I is I1 - 1.

プロローグ変数は一度だけ割り当てることができます。を試した場合、それ自体がマイナス1I is I - 1であると主張しています。これは決して真実ではないため、述語は失敗します。上記の例のIように、中間変数を使用する必要があります。I1

于 2012-10-25T14:24:22.143 に答える