【问题标题】:what is logic programming? and what is different from other [closed]什么是逻辑编程?和其他的有什么不同[关闭]
【发布时间】:2010-04-18 15:07:04
【问题描述】:

今天和其他朋友聊天,他说他有逻辑编程能力,所以我很好奇。

【问题讨论】:

  • 所有编程都是逻辑。你的朋友在假装很棒。
  • 如果他完全使用工业机械,他可能指的是梯形逻辑。它是汇编语言和继电器图之间的中间交叉,最初是为需要创建等效软件以替换旧的硬接线继电器系统的电气工程师设计的。信不信由你,相当大比例的工业机械仍然主要使用几乎完全由简单逻辑门组成的语言进行编程。

标签: programming-languages logic prolog


【解决方案1】:

wikipedia 条目很好地解释了这一点:虽然表面上这似乎是一个多余的术语,因为所有编程都使用逻辑,但实际上它是一个定义良好的范式的术语,例如,“函数式编程”和“对象-面向编程”。具体来说,

逻辑编程,在较窄的范围内 更普遍的意义 理解,是使用逻辑作为 既是声明性的又是程序性的 表示语言。它基于 基于一个倒退的事实 推理定理证明器应用于 陈述句形式为 含义:

If B1 and … and Bn then H

将含义视为 目标减少程序:

to show/solve H, show/solve B1 and … and Bn.

Prolog 语言(在某些变体中)可能仍然是最流行的逻辑编程语言。

【讨论】:

    【解决方案2】:

    我通常将其理解为使用 prolog。 Prolog 允许您定义谓词和真值。然后序言解释器可以使用标准逻辑规则得出进一步的“真相”。例如,以下每一行在第一个和第二个参数之间建立了father_childmother_children 关系(提到的人来自辛普森一家)。

    member(X, [X|_]).
    member(X, [_|T]) :- member(X,T).
    
    mother_children(marge, [bart, lisa, maggie]).
    mother_children(mona, [homer, jay]).
    
    mother_child(X, Y) :- mother_children(X, C), member(Y, C).
    
    father_child(homer, bart).
    father_child(homer, lisa).
    father_child(homer, maggie).
    father_child(abe, homer).
    father_child(abe, herb).
    father_child(abe, abbie).
    
    sibling(X, Y) :- parent_child(Z, X), parent_child(Z, Y).
    
    parent_child(X, Y) :- father_child(X, Y).
    parent_child(X, Y) :- mother_child(X, Y).
    

    如果您将该程序启动到 prolog 解释器中,然后询问它sibling(X,Y),它将返回给您所有存在的兄弟姐妹对。有趣的是,我们从来没有明确说过,巴特是丽莎的兄弟姐妹。我们只是定义了父亲和母亲的关系,但是通过定义进一步的规则,prolog 使用正常的规则来推导出满足sibling 规则的名称。

    Prolog 在 80 年代更流行,在各种 AI 系统等中。这些天它有点过时了(不是你在大学里知道的那样,它仍然很热)。

    【讨论】:

      【解决方案3】:

      我认为那句话的意思是,“我可以编程if/then/else 语句”。或者换句话说,我认为这句话的意思是,“我不能用任何真正的技术编程”。我不会留下深刻的印象。

      【讨论】:

      • 一个简单的谷歌搜索会立即表明你的假设是错误的。 google.com/search?q=logic+programming
      • 我刚刚点击了您搜索的第一个链接,这似乎证实了我的想法。 :-/ 我想说几乎任何开发人员都应该能够将一些条件组合在一起并与它们一起工作。 Ands、Ors、Nots,它们都是非常基本的并且完全与技术无关。如果你认为这个谷歌搜索显示我的假设是错误的,那么你到底假设我的假设是什么?在过去的几年里,我采访了很多人,如果我问他们“你是哪种程序员?”他们的回答是“逻辑程序员”,面试就差不多结束了。
      • 让我以更具体的方式重申最后的评论。开发人员应该擅长逻辑程序员——这通常被认为是最低要求。开发人员不应该有逻辑问题。
      • 使用 Prolog 编程与抛出 if/else 语句并不完全相同。它更类似于 SQL,因为它使用集合(布尔值)进行编程,并且流程可能非常难以确定。例如,尝试检查 Prolog 中的 append 函数。逻辑编程很模糊,它确实可能意味着很多东西(这也是为什么维基百科的文章如此模糊),但我认为它是指序言之类的东西。
      • @Jaxidian:逻辑编程甚至与说“我用逻辑编程”不一样,就像函数式编程甚至不接近说“我用函数编程”一样。然而,面向对象的程序员实际上使用对象以及函数和使用逻辑进行编程。我是一个很好的 C# 开发人员,但不会称自己为逻辑程序员或函数式程序员。
      猜你喜欢
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多