Во-первых, для простого ответа:
fruitsILike(F) :-
fruits(Fs)
member(F, Fs),
foodILike(Ls),
member(F, Ls).
Вы можете избежать проверки членства, свернув списки фруктов и продуктов:
fruit(banana).
fruit(apple).
...
foodILike(hamburger).
foodILike(banana).
...
fruitsILike(F) :-
fruit(F),
foodILike(F).
Тем не менее, вы, кажется, пытаетесь решить проблемы в Прологе, используя императивные идиомы, и это не сработает. Во-первых, предикаты ничего не возвращают. При вызове предиката Prolog объединяет его аргументы с допустимыми значениями в соответствии с фактами и правилами в программе. Следовательно, «возвращаемое значение» - это присвоение несвязанным переменным. Во-вторых, Пролог не делает что-то «так скоро». Он перебирает все возможные решения. Вы получаете первое решение, затем второе решение и т. Д.