在我们的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 扩展自定义类型 MyNodeISeq 协议
重复这些步骤,直到 MyNode 实现所有算法需要的接口

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

非常感谢!
...