在序言中拆分列表

发布于 2024-11-28 07:00:55 字数 407 浏览 2 评论 0原文

假设我在序言中有这个列表:

[-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...

或者另一个解决方案可以替换为“,”,这样它就变成了一个包含不同元素的列表?

suppose i have this list in prolog:

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

there is way to split this in:

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

Split means have different pice of the list.

Maybe:

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

Or another solution can be replace - with "," so it become a list with different elements?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迷途知返 2024-12-05 07:00:55

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

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

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

我使用累加器,因为像 abc 这样的东西被 AB 分割code> 转换为 abc

编辑:如果您知道有 4 个术语,则可以使用类似

split(A-B-C-D, A, B, C, D).

You can use pattern matching. Similar to the way you use it on lists ([H|T]):

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

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

I'm using accumulator, because something like a-b-c is split by A-B into a-b and c.

EDIT: If you know you have 4 terms, you can use something like

split(A-B-C-D, A, B, C, D).
月隐月明月朦胧 2024-12-05 07:00:55

琐碎:

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)]].

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

Trivial:

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

Usage:

?- 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)]].

Or do the pattern matching inline, it's rather wasteful to write a predicate for such a task, which seems rather one-off to me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文