I am new to Prolog and I need help with a little problem:
I am trying to split a list of pairs in two lists. The first list contains all pairs with a given key, the second list contains all other objects.
This is the code that I still have:
splitList([],_,[],[]). splitList([(A,X)|Rest], B, [Elem1|List1], [Elem2|List2]):- ( A == B -> Elem1 = (A,X), splitList(Rest, B, List1, [Elem2|List2]) ; Elem2 = (A,X), splitList(Rest, B, [Elem1|List1], List2) ).
When I try to test it, this is what I get:
[trace] [3] 143 ?- splitList([(1,yellow),(1,blue),(2,yellow),(2,blue)],1,X,Y). Call: (37) splitList([ (1, yellow), (1, blue), (2, yellow), (2, blue)], 1, _G4821, _G4822) ? creep Call: (38) 1==1 ? creep Exit: (38) 1==1 ? creep Call: (38) _G4928= (1, yellow) ? creep Exit: (38) (1, yellow)= (1, yellow) ? creep Call: (38) splitList([ (1, blue), (2, yellow), (2, blue)], 1, _G4929, [_G4931|_G4932]) ? creep Call: (39) 1==1 ? creep Exit: (39) 1==1 ? creep Call: (39) _G4940= (1, blue) ? creep Exit: (39) (1, blue)= (1, blue) ? creep Call: (39) splitList([ (2, yellow), (2, blue)], 1, _G4941, [_G4931|_G4932]) ? creep Call: (40) 2==1 ? creep Fail: (40) 2==1 ? creep Call: (40) _G4931= (2, yellow) ? creep Exit: (40) (2, yellow)= (2, yellow) ? creep Call: (40) splitList([ (2, blue)], 1, [_G4949|_G4950], _G4932) ? creep Call: (41) 2==1 ? creep Fail: (41) 2==1 ? creep Call: (41) _G4958= (2, blue) ? creep Exit: (41) (2, blue)= (2, blue) ? creep Call: (41) splitList([], 1, [_G4949|_G4950], _G4959) ? creep Fail: (41) splitList([], 1, [_G4949|_G4950], _G4959) ? creep Fail: (40) splitList([ (2, blue)], 1, [_G4949|_G4950], _G4932) ? creep Fail: (39) splitList([ (2, yellow), (2, blue)], 1, _G4941, [_G4931|_G4932]) ? creep Fail: (38) splitList([ (1, blue), (2, yellow), (2, blue)], 1, _G4929, [_G4931|_G4932]) ? creep Fail: (37) splitList([ (1, yellow), (1, blue), (2, yellow), (2, blue)], 1, _G4821, _G4822) ? creep false.
The obvious solution should be X = [(1, yellow), (1, blue)] and Y = [(2, yellow), (2, blue)], but instead I get false. Can someone tell me what I'm doing wrong?
Thanks in advance,
Walle