我在写一个优雅drop-last-by或butlast-by功能时遇到了麻烦.
(drop-last-by odd? [2 1 9 4 7 7 3]) ; => (2 1 9 4)
(drop-last-by odd? [2 4]) ; => (2 4)
(drop-last-by odd? [9]) ; => ()
Run Code Online (Sandbox Code Playgroud)
到目前为止我的工作但看起来有点笨拙,我想知道它是否可以在两三行中完成.
(defn drop-last-by [pred coll]
(let [p (partition-by pred coll)]
(apply concat (if (and (seq p) (pred (first (last p))))
(butlast p)
p))))
Run Code Online (Sandbox Code Playgroud)
既然drop-while已经基本上完成了你所需要的,而且由于你当前的解决方案已经不是很懒,我写的drop-last-by是这样的:
(defn drop-last-by [pred coll]
(reverse (drop-while pred (reverse coll))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |