Prolog中字符串的连接

时间:2015-11-15 23:38:24

标签: string prolog concatenation string-concatenation

我正在尝试在Prolog中连接4个字符串。我能够连接2和3个字符串,但我无法使用它。这是我到目前为止所做的:

join2(String1,String2,Newstring) :-
   name(String1,L1), name(String2,L2),
   append(L1,L2,Newlist),
   name(Newstring,Newlist).

join3(String1,String2,String3,Newstring) :-
   join2(String1,String2,S),
   join2(S,String3,Newstring).

join4(String1,String2,String3,String4,Newstring) :-
   join3(String1,String2,String3,Newstring),
     join2(String1,String2,S),
     join2(S,String3,Newstring).
   join3(Newstring,String4,Newstring).

2 个答案:

答案 0 :(得分:2)

我不确定您的约束是什么,但您也可以使用SWI的append/2maplist/3

concatenate(StringList, StringResult) :-
    maplist(atom_chars, StringList, Lists),
    append(Lists, List),
    atom_chars(StringResult, List).

然后你可以根据自己的喜好连接:

?- concatenate(["hello", ", ", "world"], String).
String = 'hello, world'.

?- concatenate(["hey, ", "you ", "don't ", "say!"], String).
String = 'hey, you don\'t say!'.

?-

请注意,以上假设您在SWI Prolog中使用默认设置:

:- set_prolog_flag(double_quotes,atom).

其中"abc"代表Prolog原子,相当于'abc'

答案 1 :(得分:1)

你需要至少2个中间 NewString 来加入4个字符串,但你提出的解决方案只使用1(S),尽管它试图使用{{1作为中间结果和最终结果。

让你为NewString做的更进一步:

join3