gpt4 book ai didi

Clojure 返回 seq 中以 key 作为第一个元素的所有对的列表

转载 作者:行者123 更新时间:2023-12-02 13:43:02 25 4
gpt4 key购买 nike

我需要定义一个函数(获取所有对 key 序列)

它返回 seq 中以 key 作为第一个元素的所有对的列表。如果没有匹配对,则返回空列表。

例如,如果我定义宠物

(def pets
'((cat 1) (dog 1) (fish 1) (cat 2) (fish 2))
)

(get-all-pairs 'cat pets) 返回 ((cat 1) (cat 2))(get-all-pairs '鸟宠物) 返回 '()

这是我的尝试:

(defn get-all-pairs [key seq]
(cond
(= key (first(first(seq)))) (cons (first seq)
(get-all-pairs key (rest seq)))
:else '()))

但是它不起作用。如果我调用它,它会发出如下消息:

#'proj2.proj2/pets
=> (get-all-pairs 'cat pets)
ClassCastException clojure.lang.PersistentList cannot be cast to clojure.lang.IFn proj2.proj2/get-all-pairs (proj2.clj:20)

不知道问题出在哪里。如何解决?

最佳答案

立即出现的错误是因为您的定义中有太多括号:(first (first (seq))) 应该是 (first (first seq)) 。一旦你解决了这个问题,你的函数应该运行完成,但给你错误的答案:想想 () 是否真的是你在 else 情况下想要的。 p>

一旦您制定了手动递归方法,请尝试弄清楚此解决方案中发生了什么:

(defn get-all-pairs [k pairs]
(filter #(= k (first %)) pairs))

关于Clojure 返回 seq 中以 key 作为第一个元素的所有对的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22265582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com