0

我的基本定义

use_module(library(clpfd)).
/* base definitions */
ice_cream(vanilla).
ice_cream(chocolate).
ice_cream(strawberry).

将单词变成整数

/*get falavor position */
icecream_index(Icecream,Icecreamlist,Start,End) :-
    var(Icecream),
    Icecream in Start .. End.
icecream_index(Icecream,Icecreamlist,Start,End) :-
    \+ var(Icecream),
    nth0(StartEnd,Icecreamlist,Icecream),
    Icecream is StartEnd,
    Icecream in StartEnd .. StartEnd.

生成所有组合的主程序

/* generate all combinations of ice cream */
icecream_menu(MenuList) :-
    MenuList = [Toppingone, Toppingtwo, Toppingthree],
    findall(X,ice_cream(X),Icecreamlist),

    length(Icecreamlist, Icecreamcount),

    Icecreamstart is 1,
    Icecreamend is Icecreamcount,

    icecream_index(Toppingone,Icecreamlist,Icecreamstart,Icecreamend),
    icecream_index(Toppingtwo,Icecreamlist,Icecreamstart,Icecreamend),
    icecream_index(Toppingthree,Icecreamlist,Icecreamstart,Icecreamend),

    all_different(MenuList),
    label(MenuList).

当我调用 MenuList(X) 时,给空变量它能够生成所有可能的组合,但是当我给它一个列表时,MenuList([vanilla, X, Y])它会在它应该生成以香草开头的所有冰淇淋配料组合时失败。

第二个问题我不知道如何将整数转换为单词,所以我不想得到 Menu = [1, 2, 3] 我想得到 Menu = [香草,巧克力,草莓]。

4

0 回答 0