在prolog中拆分列表

时间:2011-08-06 23:23:47

标签: list split prolog

假设我在prolog中有这个列表:

[-0.791666666666667-[]-[predicate(a,b,c,d)]-[predicate_2(p,e,q,d,g)]]

有办法将其拆分为:

-0.791666666666667, [], [predicate(a,b,c,d)], [predicate_2(p,e,q,d,g)] ???

分割意味着列表中有不同的部分。

也许:

X = -0.791666666666667  Y = []  Z = [predicate(a,b,c,d)] etc...

或者另一个解决方案可以替换 - 用“,”所以它成为一个包含不同元素的列表?

2 个答案:

答案 0 :(得分:0)

您可以使用模式匹配。与您在列表中使用它的方式类似([H|T]):

split(A, R) :- split(A, R, []).

split(A-B, R, Acc) :- split(A, R, [B|Acc]), !.
split(H, [H|T], T).

我正在使用累加器,因为像a-b-c这样的东西被A-B分成a-bc

编辑:如果您知道自己有4个学期,可以使用类似

的内容
split(A-B-C-D, A, B, C, D).

答案 1 :(得分:0)

琐碎:

to_list([A-B-C-D], [A,B,C,D]).

用法:

?- to_list([-0.791666666666667-[]-[predicate(a,b,c,d)]-[predicate_2(p,e,q,d,g)]],
           L).
L = [-0.791667, [], [predicate(a, b, c, d)], [predicate_2(p, e, q, d, g)]].

或者内联模式匹配,为这样的任务编写谓词是相当浪费的,这对我来说似乎是一次性的。