私は今プロローグを理解しようとしています。私は入力を与えたい:変換(S(S(S(X)))、Y)とする必要があり、出力Y = 3プロローグで整数を返します
convert(s(0), 1).
convert(s(s(0)), 2).
convert(s(X),Y) :- convert(X,Y is (Y+1)).
これらの私のルールは今ですが、入力のみ: 変換する(s(0)、1)。そして、 convert(s(s(0))、2)。作業。
私の再帰が正しく機能するなら、私はルールを必要としません:convert(s(s)(0))、2)。 誰かが私にこの問題を手伝ってもらえますか?
は、ここでは二つの問題があります
おかげで、それは働きます!しかし、なぜRのような大きな手紙を書いておくことが重要なのですか? convert(s(X)、R) しかし、なぜ(s(X)、r)を変換しないのですか? – Runner
@Runner:変数は大文字で始まるので、定数は小文字です。これは規約ではありません(そうしないと、プログラムが不正確になります)。迷惑なことやそれに似たものを鳴らさずに、Prologについていくつかの基本を調べる必要があります。 –
正しいですが、clpfd-versionは多くの一時変数を必要とするため、非常に非効率です。効率的なバージョンはどうですか?ああ、s(X)、確かに。 – false