只是要小心,并保持统一。把每件东西放在自己的地方。而且,您已经破坏了一些需要修复的列表代码。所以,给你。
middle(M, [_,M,_]).
right(A,B,X) :- left(B,A,X).
left(A,B,X) :- append(_, [A,B | _], X).
run :-
X = [_,_,_],
middle([_ ,brown,_ ],X), /* the brown guinea pig - middle of the cage */
member([_ ,brown,carrots],X), /* the brown guinea pig loves to eat carrots */
member([giggles ,_ ,salad ],X), /* the salad-eating guinea pig giggles */
right( [_ ,_ ,salad ], /* the salad-eating guinea pig sits */
[_ ,brown,_ ],X), /* to the right of the brown guinea pig */
left( [_ ,black,_ ], /* the black guinea pig sleeps to the left */
[squeaks ,_ ,_ ],X), /* of the squeaking guinea pig */
member([grumbles,black,_ ],X), /* the black guinea pig grumbles */
member([giggles ,grey ,_ ],X), /* the grey guinea pig giggles */
member([_ ,EC ,cucumbers],X), /* a guinea pig that loves to eat cucumbers */
X = [[_,A,_],[_,B,_],[_,C,_]], write([A,B,C]), nl, /* write out all fur colors */
write('the '), write(EC),
write(' guinea pig loves to eat cucumbers'), nl. /* the answer to the question */
但是,有些人可能会争辩说,人类程序员在这里灌输了太多他的理解(即有些受骗),他在模型中制作了三个位置来表示他知道豚鼠在这个宇宙中具有的三个属性。
不过,这不是必需的。以下是我们如何让“计算机”使用某种“可扩展记录”自行解决所有问题 :
attr(A, [N-V | R]):- memberchk( N-X, A), X = V, attr(A, R).
attr(_, []).
color(A, B):- attr( A, [color-B]).
pigs( Pigs):-
length( Pigs,N),
N rem 2 =:= 1, Middle is N div 2, /* there _is_ a middle - list length is odd */
nth0( Middle,Pigs,P1), attr( P1, [color-brown]),
member( P2, Pigs), attr( P2, [color-brown, eats-carrots]),
member( P3, Pigs), attr( P3, [eats-salad, sound-giggles]),
right( P4,P4b,Pigs), attr( P4, [eats-salad]), attr( P4b, [color-brown]),
left( P5,P5b,Pigs), attr( P5, [color-black]), attr( P5b, [sound-squeaks]),
member( P6, Pigs), attr( P6, [color-black, sound-grumbles]),
member( P7, Pigs), attr( P7, [color-grey, sound-giggles]),
member( P8, Pigs), attr( P8, [eats-cucumbers, color-EatsCucumbers]),
length( Furs, N), maplist( color, Pigs, Furs),
writeln( Furs), writeln( EatsCucumbers), nl, !.
测试:
14 ?- time(( pigs(_P), maplist(writeln,_P), ! )).
[black,brown,grey]
black
[color-black, sound-grumbles, eats-cucumbers|_G1484]
[color-brown, eats-carrots, sound-squeaks |_G1424]
[eats-salad, sound-giggles, color-grey |_G1463]
/* % 287 inferences, 0.000 CPU in 0.030 seconds (0% CPU, Infinite Lips) */
true.