2016-09-29 9 views
2

Я не понимаю, почему следующий код не компилируется; она производит put_attr/3: Uninstantiated argument expected, found 2 (1-st argument) ошибку:Ошибка компиляции при смешивании 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 
    ). 

Я не понимаю, почему это так. Замена #= с простым объединением = делает его компиляцию, но я не понимаю, почему это не будет компилировать, учитывая, что этот предикат:

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).

Это было исправлено Markus Triska с this commit.