将字符列表转换为字符串列表,每个字符串列表在Prolog中包含3个字符

问题描述

我想使用Prolog将字符列表转换为字符串列表,每个字符串包含3个字符。

例如,['a','b','c','d','e','f']将转换为[“ abc”,“ def”]。

我尝试过的是

toTriplets([H1|[H2|[H3|T]]],[F|R]) :- string_concat(H1,H2,X),string_concat(X,H3,F),toTriplets(T,R).

但是,这在我执行命令时给我错误

?- toTriplets(['a','b','c','d','e','f'],X).
false.

我的代码有什么问题?我真的不知道...

解决方法

问题是您缺少递归的基本情况。 例如

toTriplets([],[]).

实际上,您有机会确定是否只接受三元组-如上-还是接受不完整的三元组,例如

toTriplets([A,B],[AB]) :- string_concat(A,B,AB).
toTriplets([A],[S]) :- atom_string(A,S).