分享你的想法,请参加2024 Clojure状态调查!

欢迎!请查看关于页面以获取更多关于如何使用本网站的信息。

–1
Clojure
已关闭

在这个场景中,你给定了一个单链表数据结构。它只包含头节点的引用。列表中的每个节点仅包含一个数值和一个指向列表中下一个节点的引用。最后一个节点的“下一个”引用包含nil值。
给定这个列表,考察以下问题
1. 找到一个具有给定数值的元素,
2. 列出列表与其自身的笛卡尔积 - 即列出由列表元素生成的所有可能的对。这里顺序很重要 - 对(1,2)与对(2,1)不同。

针对这些问题中的每一个
描述你会使用的算法。将其以伪代码或实际代码的形式编写,并解释所有步骤、条件、函数的参数以及所有其他使用到的特性。

非常感谢!

已标记为“已完成”

1 个回答

+1

这看起来像是家庭作业

以下是每个问题的解决方案

  1. (first (filter #{42} my-list))
  2. (for [i my-list j my-list] [i j])

然后

定义一个“原始”类型:(deftype MyNode [value next-node])
构建您的列表: (def my-list (->MyNode 42 (->MyNode 55 nil)))

尝试执行 1(first (filter #{42} my-list))
它将抛出异常,因为您的数据类型没有实现 ISeq 接口。
使用 extend-type 将您的自定义类型 MyNode 扩展到 ISeq 协议。
并重复此过程,直到 MyNode 实现所需的所有接口。

by
感谢您平静的回答
我不知道如何在终端上执行 'Use extend-type' 部分...
你能为我解释一下吗?

非常感谢你!
...