gpt4 book ai didi

design-patterns - 如何在不剪切的情况下模式匹配 PROLOG 中的包装变量?

转载 作者:行者123 更新时间:2023-12-01 23:55:52 27 4
gpt4 key购买 nike

我有一个非常简单的问题要问 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.

这可行,但必须有更好的方法。

最佳答案

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

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

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

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

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

关于design-patterns - 如何在不剪切的情况下模式匹配 PROLOG 中的包装变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23856389/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com