How to make list out of objects in Prolog? -


i can add single object list code , query:

makelist(a, b, c, x) :- append([1, 2, 3],a, x).  ?- makelist(a, b, c, x). x = [1, 2, 3|a]. 

however rather usual separator comma (,) there's vertical line separator (|) , cannot add object same list:

makelist(a, b, c, x) :- append([1, 2, 3],a, x), append(x,b, x).  ?- makelist(a, b, c, x). false. 

there several misunderstandings. first, lists , elements confused leads "dotted pair" |a]. then, seems role of variables not clear you.

in goal append([1,2,3],a,x) both a , x supposed lists. however, set a a not list. problem behind append/3 accepts term second argument. see this, @ answers:

| ?- append([1,2,3],a,x). x = [1,2,3|a]. 

so a can anything, should rather list.

| ?- = a, append([1,2,3],a,x). = a, x = [1,2,3|a]. 

note append/3 insists first argument list (or partial list). once have bad list, can no longer append further. is:

| ?- = a, append([1,2,3],a,x), append(x, _, _). no 

note did not use definition literally. instead, replaced arguments _ since cannot help.

the second problem stems goal append(x, b, x). goal, can only true if b = []. let's try out:

| ?- append(x, b, x). x = [], b = [] ? ; x = [_a], b = [] ? ; x = [_a,_b], b = [] ? ; x = [_a,_b,_c], b = [] ... 

and:

| ?- b = [_|_], append(x, b, x). 

loops.

while there many answers x, b [].


Comments

Popular posts from this blog

c++ - How to add Crypto++ library to Qt project -

jQuery Mobile app not scrolling in Firefox -

How to use vim as editor in Matlab GUI -