私はPrologを学んでいます。私はelemindex
という述語を使って、elemindex(element, index, list)
の形式で、例えばelemindex(1,0,[1,2,3,1]).
またはelemindex(3,0,[1,2,3,1]).
のように実験していました。機能を失うことなく述語の応答内でs(N)を評価する
によりインスタンス化の制約に、私はこれで終わった:私は?- elemindex(1,N,[1,2,3,1]).
を照会しかし、もし、私の例のように、プロローグが応答
elemindex(E, 0, [E|_]).
elemindex(E, s(M), [_|L]) :- elemindex(E,M,L).
:
N = 0
N = s(s(s(0)))
yes
これは確かに取り組んでいるが、はs(s(s(0)))
に少なくとも3
と表示したいと思います。さらに?- elemindex(E, 3, [1,2,3,4]).
のようなクエリを実行することはできませんが、コードをN is M+1
に変更すると、第1種のクエリを評価する能力がなくなります。
- がどのように私は私の結果で
3
として表示するs(s(s(0)))
を取得することができます。だから、私の質問は2倍のですか?
elemindex
を実装して、とのインデックスをクエリできるようにするにはどうすればよいですか?
をなぜあなたはこのコンテキストで '1'/'秒を使用していますか?あなたは 'N#= M + 1'を試しましたか? (ライブラリ 'clpfd'を使用) – lurker
@lurker'#= 'を使って何をするのか説明できますか?私はプロローグにはとても新しいです。 – AJFarmar