【发布时间】:2018-11-03 23:50:36
【问题描述】:
我对编程中的“为工作使用正确的工具”理念感兴趣,并且我有一个问题,我认为可以通过逻辑编程来解决。我的意思是幼稚的,因为我没有做过任何逻辑编程,只是开始学习。但是在我仍然试图掌握概念和词汇的阶段,我希望在可能变得太深之前获得一些专家指导。
让我想到使用逻辑编程的原因是我对“统一”这个概念的模糊认识,但我的想法是以一种我不确定是惯用还是正确的方式来使用它。给定两个对象(或树),我想通过它们的属性(或叶子)比较两者的相等性,我想返回的是一些“差异”的概念——即,给定这两个对象的方式没有不同,必须对其中一个进行哪些更改才能使两者成为某种平等的概念?
例如,假设我有两个对象 chair 和 stool。假设每个都包含一个属性或属性列表,我想构建一个系统,该系统可以返回类似“如果凳子的 legCount 是 4 和 hasBack 是true。”
出于某种原因,从语义上讲,我将其想象为一种余数,例如,chair 减去 stool 等于一个 leg。不确定这是否有帮助......
我可以想到一些用命令式代码来做这件事的愚蠢方法,以及一些使用函数式技术来做这件事的更优雅的方法,但我有一种预感,逻辑编程可能特别适合这个。任何关于研究方向的智慧将不胜感激,谢谢!
【问题讨论】:
-
听起来并不值得为此学习 Prolog。统一只是说是或否(基本上)。此外,您可以轻松地使用具有固定顺序的列表,但如果您想比较何时可能不同的顺序,您必须自己编写代码。在 Prolog 中很容易(使用统一)而在大多数其他语言中很乏味/困难的一件事是通过组合部分来逐步构建复杂的数据结构。
-
@TomasBy 好的,谢谢。
标签: prolog logic-programming clojure-core.logic minikanren