【发布时间】:2015-04-16 04:29:40
【问题描述】:
我是 Prolog 的新手,我正在尝试解决这样的问题,所以我希望有人能提供帮助。
我想实现一个三元谓词flatten_term(Term, Function_symbol, Flattened_term)
如果 Flattened_term 通过展平所有从 Term 获得,则成功
Function_symbol 的嵌套出现。假设Term 不包含
Prolog 变量和没有列表而不检查列表。
?- 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)).
【问题讨论】:
-
预计您在 stackoverflow.com 上会尝试解决您的问题,并询问您遇到的具体问题,展示您尝试过的内容。此外,您需要考虑并描述问题的条件。有问题的术语是否总是单一的(只有一个参数,如
f(f(g(f(a))))?或者他们可能看起来像f(f(b),g(f(f(a)))?如果它们是单一的,您可以使用简单的递归方法来解决您的问题。您可能需要使用term processing predicate。 -
这对初学者来说不是最好的问题,你需要分解函数符号。虽然这是可能的,但我非常怀疑你会从中学到很多东西。此外,尚不清楚
f是什么意思。一个论点?两个论据?任何数字?无论如何,这不是一个好的开始。
标签: prolog