trealla-prolog / trealla

A compact, efficient Prolog interpreter written in plain-old C.
MIT License
252 stars 11 forks source link

phrase/2 instantiation_error? #530

Closed flexoron closed 2 months ago

flexoron commented 2 months ago

v2.51.2

$ tpl
?- [user].
phrasetrap1(X,Y) :- phrase([X],Y).
phrasetrap2(X,Y) :- phrase([X|"abc"],Y).
phrasetrap3(X,Y) :- phrase(["abc"|X],Y).
end_of_file.

?- phrasetrap1("abc",Y).
   Y = ["abc"].

?- phrasetrap2("abc",Y).
   Y = ["abc",a|"bc"].

?- phrasetrap3("abc",Y).
   throw(error(instantiation_error,must_be/2)). % unexpected
?-

/* In contrast resp. expected
?- X="abc",phrase(["abc"|X],Y).
   X = "abc", Y = ["abc",a,b,c].
*/
flexoron commented 2 months ago

Fixed!

?- phrasetrap3("abc",Y), phrasetrap2("abc",Y), Y=[_,A,B,C].
   Y = ["abc"|"abc"], A = a, B = b, C = c.