gpt4 book ai didi

clojure - 在列表中查找元素并保留相邻元素

转载 作者:行者123 更新时间:2023-12-05 08:50:13 26 4
gpt4 key购买 nike

我有一个像 '(1 2 3 1 4 1 1 6 8 9 0 1) 这样的列表(实际上不是数字,只是一个例子)

我想保留所有“1”和“1”旁边的元素。

所以我想要的结果是(1 2 1 4 1 1 6 1)

从命令式的角度来看,我会用 for 循环遍历列表,找到某个索引 i 处的“1”,然后也将元素保留在索引 i+1 处。

解决此问题的功能性 Clojure 惯用方法是什么?

最佳答案

使用reduce,您可以沿着原始列表移动,同时构建一个新列表。减少函数 f 被传递到现在为止的新列表和旧列表中的下一个元素。如果到现在为止列表以 1 结尾,或者下一个元素是 1,则将该元素添加到新列表中。否则保持新列表不变并继续前进。

user> (def xs [1 2 3 1 4 1 1 6 8 9 0 1])
#'user/xs

user> (defn f [x y] (if (or (= 1 y) (= 1 (peek x))) (conj x y) x))
#'user/f

user> (reduce f [] xs)
[1 2 1 4 1 1 6 1]

关于clojure - 在列表中查找元素并保留相邻元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62597421/

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