我需要定义一个名为(get-all-pairs key seq)的函数
它返回seq中所有以第一个元素为键的对的列表.如果没有对匹配,则返回空列表.
例如,如果我说宠物
(def pets
'((cat 1) (dog 1) (fish 1) (cat 2) (fish 2))
)
Run Code Online (Sandbox Code Playgroud)
(get-all-pairs 'cat pets)返回((cat 1) (cat 2))并(get-all-pairs 'bird pets)返回'().
这是我的尝试:
(defn get-all-pairs [key seq]
(cond
(= key (first(first(seq)))) (cons (first seq)
(get-all-pairs key (rest seq)))
:else '()))
Run Code Online (Sandbox Code Playgroud)
但它不起作用.如果我打电话给它,它的消息如下:
#'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)
Run Code Online (Sandbox Code Playgroud)
我不知道问题出在哪里.怎么解决?
直接错误是因为你的定义中有太多的parens:(first (first (seq)))应该只是(first (first seq)).一旦你修复了它,你的函数应该运行完成,但给你错误的答案:想想()你的else情况是否真的是你想要的.
一旦你完成了手动递归方法,试着弄清楚这个解决方案中发生了什么:
(defn get-all-pairs [k pairs]
(filter #(= k (first %)) pairs))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |