标签: prolog
我想在X = a(b(c(d)))中翻译[a, b, c, d]等表达式。
X = a(b(c(d)))
[a, b, c, d]
我想我必须迭代/递归运算符=..,但我不知道如何。我试过了
=..
flatten([], []). flatten(Exp, X) :- Exp=..[H,T], flatten(T, Y), X is append([H], Y).
但它似乎不起作用。
有人可以帮助我吗?
答案 0 :(得分:3)
flatten / 2通常是内置的,而is / 2则引入算术评估。因此,您的Prolog应该在您的代码中警告您这些问题。
如果要将表达式限制为一元术语,则应简化代码(注意我重命名了该过程):
flatterm(Exp, [H|R]) :- Exp =.. [H, T], !, flatterm(T, R). flatterm(T, [T]).
试验:
?- flatterm(a(b(c(d))),X). X = [a, b, c, d].
您应该尝试理解为什么我交换了基础/递归案例,以及!(也称为cut)的角色。
!