我对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.
这有效,但必须有更好的方法。
答案 0 :(得分: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
,您可以将谓词用作真实关系,即在所有方向上。
您可能需要一个预处理步骤,在解析给定程序期间或之后使用专用仿函数包装变量。在那之后,你有了这个干净的表示,并且可以在整个程序的其余部分使用模式匹配。