首页 > 解决方案 > prolog中的编码程序

问题描述

我目前正在prolog中编写一个编码程序。

首先我想把一个词切碎

例如:朋友应该是这样的:

[[F,R,I][R,I,E][I,E,N][E,N,D][N,D,S]]

目前我有这样的东西,但不明白为什么当我尝试一个词时程序不工作。

它总是回答错误。

couper([X1,X2,X3|L],[L1|ResQ]):-
    L1 = [X1,X2,X3],
    couper([X2,X3|L],ResQ).

couper([_,_|[]] , []).
couper([]       , []).
couper([_|[]]   , []).

标签: prolog

解决方案


你也可以试试:

?- findall([A,B,C], append(_,[A,B,C|_],[f,r,i,e,n,d,s]), T).
T = [[f, r, i], [r, i, e], [i, e, n], [e, n, d], [n, d, s]].

作为一项规则:

couper(L, T) :-
   findall([A,B,C], append(_, [A,B,C|_], L), T). 

例子:

?- couper([f,r,i,e,n,d,s], T).
T = [[f, r, i], [r, i, e], [i, e, n], [e, n, d], [n, d, s]].

?- couper([e,x,a,m,p,l,e,s], T).
T = [[e, x, a], [x, a, m], [a, m, p], [m, p, l], [p, l, e], [l, e, s]].

?- couper([t,w,o], T).
T = [[t, w, o]].

?- couper([t,o], T).
T = [].

注意在 Prolog 中,大写字母是变量。因此,必须使用小写字母列表调用谓词(也许这是您的问题的原因)。


推荐阅读