3

我对 Prolog 程序员有一个非常简单的问题。这应该很容易,但我对这种语言没有任何经验,所以请帮忙。我正在尝试在 Prolog 中解释一些简单的编程语言。在这种语言中,我可以有两种类型的变量——简单变量和数组变量。我有一个计算给定变量值的函数:

%calc(+var, +state, -result)

变量可以是简单的变量,也可以是x数组变量,如array(ident, index). 我不知道应该如何在 Prolog 中编写该函数,因此它对常规变量和数组变量做了不同的事情。我想出了这样的事情:

calc(array(Ident,I), S, R) :- calculating R for array var, !.
calc(Ident, S, R) :- calculating R for regular var.

这行得通,但必须有一些更好的方法。

4

1 回答 1

3

有一种干净的方法可以做到这一点:对变量使用专用的包装器,这样您就可以通过模式匹配来识别它们。例如:

calc(array(Ident,I), S, R)  :- calculating R for array var.
calc(variable(Ident), S, R) :- calculating R for regular var.

我使用函子variable/1来识别变量。

不需要!/0处理这种表示,您可以将谓词用作真正的关系,即在所有方向上。

您可能需要一个预处理步骤,在解析给定程序期间或之后使用专用函子包装变量。之后,您就拥有了这种清晰的表示形式,并且可以在程序的其余部分中使用模式匹配。

于 2014-05-26T08:03:19.247 回答