1

私は長い間、プロローグの加算述語に本当にこだわっています。どんな助けでも私を大いに助けます..

これは私の述語です:

p(s(U,I), [s(A,B)|P1], T1,H(N, E), P,C) :- m(s(E,F), p(s(U,I), [s(A,B)|P1], +(C,F) ,H(N,E), P,C).

この部分を除いて、すべて正常に動作します:

+(C,F) は常に 5 ではなく 3+2 のような値を返します。

私はすべての可能な方法を試しました

p(s(U,I), [s(A,B)|P1], T1,H(N, E), P,C) :- m(s(E,F)), C2 is C+F, p(s(U,I), [s(A,B)|P1], C2 ,H(N,E), P,C).

しかし、5 ではなく 3+2 のような整数 + 整数として返されるたびに。

どんな助けでも大いに役に立ちます。

ありがとう!

4

1 に答える 1

1

is/2演算を実行するには、述語を使用する必要がありますX is 3 + 2.。それ以外の場合は「評価」されません!

試す:

p(s(U, I),
  [s(A, B)|P1],
  C1,
  H(N, E),
  P,
  C) :-
    m(s(E, F)),
    C2 is F + C1,
    p(s(U, I),
      [s(A, B)|P1],
      C2,
      H(N, E),
      P,
      C).

述語を他の述語引数スポットに配置すると、述語は実行されません (ここで非メタ述語について話している場合)。それがあなたの問題でした。

于 2012-04-08T21:48:38.013 に答える