Prolog: copy list to already assigned list -


i struggling feel should simple, doesn't seem in prolog! make list2 equal list1, list2 has been assigned in past (i.e. not variable).

if list2 variable, unify list1 , list2:

list2=list1. 

but in case list2 exists (and not equal list1) , predicate fails.

i have tried following:

copy(list1,list2). copy(l,r) :- ccp(l,r). ccp([],[]). ccp([h|t1],[h|t2]) :- ccp(t1,t2). 

but fails, presumably same reason?

could steer me in right direction? teaching myself prolog apologies if overlooking simple. thanks.


context:

i trying add term l list list2 each time predicate add_to_list run. far have following:

add_to_list(list2,list1):- generatel(l), ( \+ memberchk(l,list2) -> list1=[l|list2]  ; list1 = list2). 

so hoping there way reassign list2 equal list1, perhaps not prolog way of thinking.

instead, have attempted pass through list1 follows:

my_predicate(list1,listout):-     add_to_list(list1,listout),     write(listout),nl,nl.  add_to_list(list2,list1):-    generatel(l),    ( \+ memberchk(l,list2) -> list1=[l|list2]  ; list1 = list2). 

this works when call my_predicate follows: my_predicate([],listout), i.e. list1 empty (as start with). able call my_predicate subsequent times my_predicate(list1,listout) pre-existing list1 taken input.

you can not "modify" variable after bound. see example:

forcing variable reassign (prolog)

prolog: changing variable between 2 known values consecutivly

when executing rules "copy" or "ccp" on 2 bound variables, prolog verify if equals , fail if not, not reassign. if of them not bound, made them equal. if of them partially unbound (some list items unbound) made equal unbound items , verify remainders.

if present full context of problem, suggest alternatives.


Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -