neighbors ( X , Y , List ) :- nextto ( X , Y , List ) .
neighbors ( X , Y , List ) :- nextto ( Y , X , List ) .
That is, either X is to the left of Y, or vice versa.einstein :-
/* 0. 5 */
Houses = [ _ , _ , _ , _ , _ ] ,
/* 1. . */
nth1 ( 1 , Houses , [ norwegian , _ , _ , _ , _ ] ) ,
/* 2. . */
member ( [ englishman , _ , _ , _ , red ] , Houses ) ,
/* 3. , . */
nextto ( [ _ , _ , _ , _ , green ] , [ _ , _ , _ , _ , white ] , Houses ) ,
/* 4. . */
member ( [ dane , _ , _ , tea , _ ] , Houses ) ,
/* 5. , Marlboro, , . */
neighbors ( [ _ , _ , marlboro , _ , _ ] , [ _ , cat , _ , _ , _ ] , Houses ) ,
/* 6. , , Dunhill. */
member ( [ _ , _ , dunhill , _ , yellow ] , Houses ) ,
/* 7. Rothmans. */
member ( [ german , _ , rothmans , _ , _ ] , Houses ) ,
/* 8. , , . */
nth1 ( 3 , Houses , [ _ , _ , _ , milk , _ ] ) ,
/* 9. , Marlboro, . */
neighbors ( [ _ , _ , marlboro , _ , _ ] , [ _ , _ , _ , water , _ ] , Houses ) ,
/* 10. , Pall Mall, . */
member ( [ _ , bird , pallmall , _ , _ ] , Houses ) ,
/* 11. . */
member ( [ swede , dog , _ , _ , _ ] , Houses ) ,
/* 12. . */
neighbors ( [ norwegian , _ , _ , _ , _ ] , [ _ , _ , _ , _ , blue ] , Houses ) ,
/* 13. , , . */
member ( [ _ , horse , _ , _ , blue ] , Houses ) ,
/* 14. , Winfield, . */
member ( [ _ , _ , winfield , beer , _ ] , Houses ) ,
/* 15. . */
member ( [ _ , _ , _ , coffee , green ] , Houses ) ,
/* , : ? */
member ( [ Owner , fish , _ , _ , _ ] , Houses ) ,
/* */
print ( 'Owner of the fish: ' ) , print ( Owner ) , nl ,
print ( 'Full Solution: ' ) , print ( Houses ) , nl .
member ( X , [ X | _]).
member ( X , [_ | Rest ]) :- member ( X , Rest ).
nth1 ( 1 , [ Elem | _], Elem ).
nth1 ( N , [_ | Rest ], Elem ) :- N > 1 , K is N - 1 , nth1 ( K , Rest , Elem ).
nextto ( L , R , [ L , R | _]).
nextto ( L , R , [_ | Rest ]) :- nextto ( L , R , Rest ).
Houses = [[norwegian,_,_,_,_],_,[_,_,_,milk,_],_,_]
then the nth1 predicate is not needed, but I wanted to be as close as possible to the original.Source: https://habr.com/ru/post/122142/
All Articles