我的基本定义
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 = [香草,巧克力,草莓]。