首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >展平term Prolog

展平term Prolog
EN

Stack Overflow用户
提问于 2015-01-17 21:46:06
回答 2查看 563关注 0票数 0

我是Prolog的新手,我正在尝试解决这样的问题,所以我希望有人能帮上忙。

我想实现一个三元谓词flatten_term(Term, Function_symbol, Flattened_term),如果Flattened_term是通过展平所有嵌套出现的Function_symbolTerm获得的,那么它就会成功。假设Term不包含Prolog变量,并且在不检查列表的情况下不包含列表。

代码语言:javascript
复制
?- flatten_term(f(f(x)), f, Flattened_term).
Flattened_term = f(x).

?- flatten_term(f(x), f, Flattened_term).
 Flattened_term = f(x).

 ?- flatten_term(a, f, Flattened_term).
Flattened_term = a.

?- flatten_term(g(f(x)), f, Flattened_term).
Flattened_term = g(f(x)).

?- flatten_term(g(f(f(x))), f, Flattened_term).
Flattened_term = g(f(x)).
EN

回答 2

Stack Overflow用户

发布于 2015-04-16 04:29:41

我使用下面的代码来计算一个学期中的项目。也许这和你要找的东西很相似?

代码语言:javascript
复制
?- flatten_term(5+3*x=10,List).
List = [=, +, 5, *, 3, x, 10].

源代码如下:

代码语言:javascript
复制
flatten_term(Term,[Term]):-
    atomic(Term),!.
flatten_term(Term,Flat):-
    Term =.. TermList,
    flatten_term_list(TermList,Flat),!.

flatten_term_list([],[]):-!.
flatten_term_list([H|T],List):-
    flatten_term(H,HList),
    flatten_term_list(T,TList),
    append(HList,TList,List),!.
票数 1
EN

Stack Overflow用户

发布于 2015-01-21 02:52:38

正如前面提到的,你真的应该展示一个你的工作的例子。但是,这里有一些提示来帮助你开始:

  1. 展平像[a,[b,c],d,[e,[f,g,h]]]这样的列表列表只是一个简单的递归树遍历。这里有几个关于堆栈溢出的问题来演示如何做到这一点,例如,这个问题,How to implement flatten list in prolog ,with tail recursion?
  2. There是一些关于类型检查和术语的分析,构造和分解的谓词:

代码语言:javascript
复制
- [http://www.swi-prolog.org/pldoc/man?section=typetest](http://www.swi-prolog.org/pldoc/man?section=typetest)
- [http://www.swi-prolog.org/pldoc/man?section=manipterm](http://www.swi-prolog.org/pldoc/man?section=manipterm)

特别是

  1. ,可以使用univ运算符=../2将复合术语分解为一个列表:

foo(alpha,bravo,charlie) =..我

这会产生L = [foo,alpha,bravo,charlie]

还需要注意的是:'=../2is used to convert a list into a compound term: T =.. [foo,alpha,bravo,charlie] which yields, as one might expectT = foo(alpha,bravo,charlie)`。

祝好运!

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

https://stackoverflow.com/questions/28000090

复制
相关文章

相似问题

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