0

我在 Prolog 中处理树木;树节点使用形式为Left-NodeValue-Rightnil的术语表示。为了强制执行优先级,使用圆括号。请注意,圆括号至关重要,因为树 (nil-5+nil)-3+nil 和 nil-5+(nil-3+nil) 显然不同。我的问题是:如何处理括号?

我尝试的一种解决方案是使用 concat_atom(+List,-Atom)。但是表达式 [(,nil,)] 显然会给出错误,并且 ['(',nil,')'] 会产生原子'(nil)',而不是 (nil)。

有什么建议么?谢谢!

4

1 回答 1

2

首先,您为什么选择如此不寻常的代表?用三元项表示内部节点似乎更合适node(Left, Value, Right)。您改为将其表示为-(-(Left, Value), Right),这似乎有点不合适。至于您的问题:要强制执行优先级,只需在写下该术语时自己使用括号即可。Prolog 顶层将在答案中自动以“正确”的方式打印术语,我认为不需要使用 concat_atom/2,或者如果有,请解释为什么不能直接输入术语。

于 2012-04-30T14:33:43.820 回答