假设我在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...
或者另一个解决方案可以替换 - 用“,”所以它成为一个包含不同元素的列表?
答案 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-b
和c
。
编辑:如果您知道自己有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)]].
或者内联模式匹配,为这样的任务编写谓词是相当浪费的,这对我来说似乎是一次性的。