gpt4 book ai didi

prolog - 序言列表中的尾随变量

转载 作者:行者123 更新时间:2023-12-02 04:19:40 25 4
gpt4 key购买 nike

我在Prolog的入门级 class 中,正在做 map 着色问题。这是我的代码。

col(Colors,Map,Coloring) :-
checkMap(Colors,Map,Coloring).
checkMap(Colors,[Country1:Country2],Coloring) :-
goodColor(Country1:Country2,Coloring,Colors).
checkMap(Colors,[Country1:Country2|Rest],Coloring) :-
goodColor(Country1:Country2,Coloring,Colors),
checkMap(Colors,Rest,Coloring).
goodColor(Country1:Country2,Coloring,Colors) :-
mem(Country1:Color1,Coloring),!,
mem(Country2:Color2,Coloring),!,
mem(Color1,Colors), mem(Color2,Colors),
not(Color1=Color2).
mem(Var,[Var|_]).
mem(Var,[_|Rest]) :-
mem(Var,Rest).

我的输出如下所示:
?- col([a,b,c],[1:2,1:3,2:3],X).
X = [1:a, 2:b, 3:c|_G332] ;
X = [1:a, 2:c, 3:b|_G332] ;
X = [1:b, 2:a, 3:c|_G332] ;
X = [1:b, 2:c, 3:a|_G332] ;
X = [1:c, 2:a, 3:b|_G332] ;
X = [1:c, 2:b, 3:a|_G332] ;
fail.

任何人都知道我如何摆脱尾随变量?我知道它主要是装饰性的,但我不知道为什么会出现它。

最佳答案

使用不完整的数据结构是有效的Prolog编程技术。如果您打算使用不完整的数据结构,则一种解决方案是:

ground_terms([H|T1],[H|T2]) :- ground(H), !, ground_terms(T1,T2).
ground_terms(_,[]).

并按如下所示更改col:
col(Colors,Map,Coloring) :-
checkMap(Colors,Map,Coloring1),
ground_terms(Coloring1,Coloring).

关于prolog - 序言列表中的尾随变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/284826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com