【发布时间】:2019-06-20 22:29:59
【问题描述】:
我已经在业余时间学习 Prolog 大约 8 个月到一年,现在我正在着手解决一些经典数据结构和算法的实现。
我对在 Prolog 中实现双向链表很感兴趣,但对如何进行感到很困惑。我被 Prolog 所吸引是因为我对“逻辑纯度”感兴趣。
似乎我是如此适应面向对象的范式,以至于没有它我就无法继续前进!
作为双向链表的参考,我的意思类似于此链接中描述的内容:
【问题讨论】:
-
那么你是在 Prolog 中说我不能制作双向链表,而是必须使用两个列表?似乎有点奇怪双向链表是我 12 岁时学习的基本数据结构!
-
我听说过并使用过差异列表。这就是为什么我问你是否建议使用 2 个列表。我想在另一个问题中,我可以想出一个场景,我将使用双向链表并寻求差异列表解决方案。但是我正在将 prolog 中的双向链表作为一个游乐场项目来追求,除了在 Prolog 中实现一个众所周知的数据结构之外没有特别的目标。
-
@S.Selfial 认为您必须牢记:Prolog 与命令式语言不同。这是一个完全不同的工具。当然,您可以在多种语言中创建双(或单)链表。但这些语言有不同的用途。螺丝刀是一把可怕的锤子。 :) 你能在 C# 中做一个不同的列表吗?可能是。但这会非常麻烦。您可以在 Prolog 中创建双向链表,但首先您需要发明自己的“链接”方式,因为 Prolog 在传统意义上不会这样做。你最终会得到一些非常笨重的东西。
-
致其他人:在问题中,OP 指出
I was attracted to Prolog because I am interested in "logical purity" .,但随后在评论中指出But I'm pursuing the doubly linked list in Prolog as a playground project with no particular aim beyond having the task of implementing a well known data structure in Prolog .我对这个问题的看法是,OP 知道他们想要什么,并且正在做自己学习锻炼。续 -
您使用表来制作列表的想法是有效的,我只是想知道您可以离双向链表多远并且仍然这样称呼它。在我的观点中,@lurker 的想法和答案有点过分了。如果一个表是一个双向链表,那么一对具有相同元素、方向相反的 Prolog 列表也是如此。那是一个双向链表吗?比桌子更接近(在精神和行为上),amirite?
标签: prolog doubly-linked-list logical-purity