首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Prolog中列出元素在圆括号中

在Prolog中列出元素在圆括号中
EN

Stack Overflow用户
提问于 2018-01-06 19:19:57
回答 2查看 1K关注 0票数 0

早上好

我有类似于此的列表:[(1-4), (2-4), (3-4)]。我只想写圆括号的第一部分/第二部分/第三部分。我写了一个函数:

代码语言:javascript
复制
write_list([]).

write_list([Head|Tail]) :-
  write(Head), nl,
  write_list(Tail).

它只写整支圆括号:

1-4

2-4

3-4

我希望我的输出成为圆括号的第一个元素:

1

2

3.

我将非常感谢您的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-06 20:19:50

给你:

代码语言:javascript
复制
write_list([]).
write_list([(A-_)|Tail]) :-
  writeln(A),
  write_list(Tail).

查询:

代码语言:javascript
复制
?- write_list([(1-4),(2-4),(3-4)]).
1
2
3
true

writeln/1只是write/1,其次是nl

票数 0
EN

Stack Overflow用户

发布于 2018-01-06 21:58:44

您并不是真的希望write结果,而是提供它们作为一个参数。Prolog中的许多初学者都被困在这一点上。而且,将相同的逻辑应用于每个list元素是非常常见的模式,因此Prolog有一个名为maplist的谓词,用于为您完成工作:

代码语言:javascript
复制
first_subterm(A-_, A).   % First subterm of `A-_` is `A`

first_subterms(PairList, FirstSubTerms) :-
    maplist(first_subterm, PairList, FirstSubTerms).

你可以这样称呼它:

代码语言:javascript
复制
| ?- first_subterms([(1-4), (2-4), (3-4)], FirstSubTerms).

FirstSubTerms = [1,2,3]

yes
| ?-

长时间递归形式与另一个答案中给出的类似:

代码语言:javascript
复制
first_subterms([], []).  % The list of first subterms of [] is []
first_subterms([(A-_)|Pairs], [A|SubTerms]) :-
    first_subterms(Pairs, SubTerms).

注意,“圆括号”是括号,在Prolog中,在这个上下文中,只执行术语的分组。结果表明,[(1-4), (2-4), (3-4)]在这里的行为与[1-4, 2-4, 3-4]一样,因为,在列表表示法中的优先级低于-。这也是我们的行为:

代码语言:javascript
复制
| ?- first_subterms([1-4, 2-4, 3-4], FirstSubTerms).

FirstSubTerms = [1,2,3]

yes
| ?-
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48130976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档