gpt4 book ai didi

prolog - "logical variable"究竟是什么?实现语言功能的一般方法是什么?

转载 作者:行者123 更新时间:2023-12-04 02:07:09 25 4
gpt4 key购买 nike

我正在尝试基于各种指令源(包括 SICP 和 Prolog 的艺术(AoP))编写一种玩具逻辑编程查询语言。我刚刚开始绘制统一算法的第一个草图(根据 AoP 的“逻辑编程计算模型的核心”),AoP 指出

When implementing the unification algorithm for a particular logic programing language, the explicit substitution in both the equations on the stack and the unifier is avoided. Instead, logical variables and other terms are represented by memory cells with different values, and variable binding is implemented by assigning the memory cell representing a logical variable a reference to the cell containing the representation of the term the variable is bound to. (1st edition, p. 71)



阅读这篇文章让我意识到我对逻辑变量的工作原理只有粗略和实际的掌握,但我并不真正了解它们是如何实现的。我什至不确定将逻辑变量与声明式编程范式的其他区域中具有的不可变变量区分开来的精确的形式特征是什么。我将不胜感激所有有启发性的解释和指导性引用。

最佳答案

部分答案,仅涉及逻辑变量的概念。

第一个近似可以说逻辑变量的行为就像数学变量:一旦它们的值被学习,它就不会改变。这导致了一次赋值变量的概念。这与命令式编程语言中的变量概念形成鲜明对比,其中它们象征性地标识内存位置,允许破坏性(因此)多重赋值。但是,回到逻辑变量,它会变得更好。一个逻辑变量可以与一个术语统一,但该术语本身可能包含变量。反过来,这些变量可以在以后与其他术语进一步统一。考虑 Prolog 中的以下示例:

?- V = a(Y).
V = a(Y).

?- V = a(Y), V = a(1).
V = a(1),
Y = 1.

在第二个查询中,变量 V通过统一它包含的变量 Y 进一步实例化, 整数 1 . =/2运算符是 Prolog 统一运算符。统一是一种逻辑操作,当您可以取两个术语并使它们相等时,它是正确的,可能通过将一个术语中的变量绑定(bind)到另一个术语中的子术语。

关于prolog - "logical variable"究竟是什么?实现语言功能的一般方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33538812/

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