Prolog 99问题:列表的行程编码

时间:2018-03-21 15:09:13

标签: prolog

我不确定该程序将如何以L2

结束
encode(L1,L2) :-
   pack(L1,L),
   transform(L,L2).

L2= [[2, a], [3, b], [2, c]]

L1=[a,a,b,b,b,c,c].
 using pack I would get 

L=[[a,a],[b,b,b],[c,c]].


%1.rule: 
transform([],[]).
%2.rule:
transform([[X|Xs]|Ys],[[N,X]|Zs]) :-
   length([X|Xs],N),
   transform(Ys,Zs).

所以假设程序会像这样。

它将首先检查不正确的第一条规则并转到第二条规则。

transform([[a|[a]]|[[b,b,b],[c,c]]],[[N|a]|Zs]) :-
   length([a|[a]],2), transform([[b,b,b],[c,c]],Zs).
transform([[b|[b,b]]|[c,c],[[2|b]|Zs]) :-
   length([b|[b,b]],3), transform([c,c],Zs).
transform([[c|[c]]|[]],[[3|b]|Zs]) :-
   length([c|[c]],3), transform([],Zs).

然后我真的不知道程序是如何进行的,我试图理解它启用Prolog的跟踪功能,但我仍然无法掌握它。

0 个答案:

没有答案