所以我必须编写不同的程序来帮助我解决农民-狼-山羊-卷心菜-肥料的难题。对于那些不知道的人来说,它涉及到一个农民必须和所有其他物体一起从河的北岸渡到南岸。银行在三种情况下是安全的:要么农民在场,要么狼没有和山羊在一起,要么山羊没有和卷心菜在一起。对于练习的目的,变量将是[f,b,g,w,c]。
我遇到的过程(选择(银行,项目))涉及找到1或2个元素的列表(总是包括农民- f),这可能是银行运输的一部分,而不会使其不安全。
如果选择([g,f,b], Items),则Items的可能返回值可以是[f], [f,g], [f,b]。但是,如果我们选择([g,f,c], Items),则唯一可能返回的值是[f,c]或[f,g],因为山羊和卷心菜不能放在一起。
因此,谁能给我一个提示,如何获得所有可能的选项的项目,但在列表不超过2个项目?
我现在不能测试,但我猜你可以这样写:
choose(Bank, [f, Other]) :-
select(f, Bank, Rest),
select(Other, Rest, LeftBehind),
safe(LeftBehind).
choose(Bank, [f]) :-
select(f, Bank, LeftBehind),
safe(LeftBehind).