【发布时间】:2016-05-24 02:33:44
【问题描述】:
当给定一些输入列表时,我想构建一个新列表,它应该:
- 始终在新列表前添加 h
- 比较输入列表的每两个连续元素,如果它们是 相等,将 y 追加到新列表中,如果不相等,则追加 x。
例子:
?- control([a,a,b,b],R).
R = [h,y,x,y].
到目前为止,这是我的代码:
control([H,H|T],K,[K,0|T2]):- control([H|T],[K,0],T2).
control([H,J|T],K,[K,1|T2]):- control([J|T],[K,1],T2).
control([H],G,G).
但它不能正常工作。
?- control([a,a,b,b],[h],L).
L = [[h], 0, [[h], 0], 1, [[[h], 0], 1], 0, [[[...]|...], 1], 0] ;
L = [[h], 0, [[h], 0], 1, [[[h], 0], 1], 1, [[[...]|...], 1], 1] ;
L = [[h], 1, [[h], 1], 1, [[[h], 1], 1], 0, [[[...]|...], 1], 0] ;
L = [[h], 1, [[h], 1], 1, [[[h], 1], 1], 1, [[[...]|...], 1], 1] ;
false.
我怎样才能使它正确?
【问题讨论】:
-
请举例说明您希望它如何工作。
-
所以就假装它有效并展示你将如何使用它。
-
现在我有了一些改进,这是我的新代码。 karama([H,H|T],[0|L]) :- karama([H|T],L)。 karama([H,J|T],[1|L]) :- karama([J|T],L)。卡拉马([H],[])。 init(A,Xs,[A|L]) :- karama(Xs,L)。现在它给了我?-init(1,[1,1,0,0],M)。 M = [1, 0, 1, 0] ; M = [1, 0, 1, 1] ; M = [1, 1, 1, 0] ; M = [1, 1, 1, 1] ;错误的。但我只想发生第一个
-
您可以编辑您的问题!并显示您期望的确切结果。不用形容了,你的措辞太模棱两可了。
标签: list prolog prolog-dif