2016-09-29 4 views
2

なぜ次のコードがコンパイルされないのか分かりません。次のコードもコンパイルされませんCLP(FD)とif-then-else構造を混在させるとコンパイルエラーが発生する

:- use_module(library(clpfd)). 

test(X, Y) :- 
    ( X = 1 
    -> Y #= 2 
    ; Y = 3 
    ). 

:つまり、なぜ私は理解していない

test(X, Y) :- 
    ( X = 1 
    -> Y = 2 
    ; Y #= 3 
    ). 

それは、put_attr/3: Uninstantiated argument expected, found 2 (1-st argument)エラーを生成します。 =はそれがコンパイルになり、単純な統一と#=を交換するが、これは、この述語ことを考慮すると、コンパイルされないでしょう、なぜ私は表示されません。

test(X, Y) :- 
    ( X = 1 
    -> Y #= 2*_ 
    ; Y = 3 
    ). 

コンパイルん!

+3

小さな例: 't(Y): - (Y#= 2; Y = 1)。 – false

+0

@Fatalize、それはコンパイルされないのはどういう意味ですか? – coder

+1

@coder私が 'make 'をすると、私が投稿したエラーが出ます。 @ falseのコメントから判断すると、彼はまったく同じ問題を抱えていると思います。 – Fatalize

答えて

1

これはlibrary(clpfd)の目標拡張のバグでした。

これは、this commitとしてMarkus Triskaによって修正されています。

関連する問題