0

所以我必须编写不同的程序来帮助我解决农民-狼-山羊-卷心菜-肥料的难题。对于那些不知道的人,它涉及到一个农民必须带着所有其他物品从一条河流的北岸穿越到南岸。银行在 3 种情况下变得安全:农夫在场,或者狼没有和山羊在一起,或者,山羊没有和卷心菜一起留下。出于练习的目的,变量将是 [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 个项目?

4

1 回答 1

1

我现在无法测试,但我想您可以编写如下内容:

choose(Bank, [f, Other]) :-
    select(f, Bank, Rest),
    select(Other, Rest, LeftBehind),
    safe(LeftBehind).
choose(Bank, [f]) :-
    select(f, Bank, LeftBehind),
    safe(LeftBehind).
于 2011-12-01T17:44:52.843 回答