Clojure手动找到序列中的第n个元素

严厉的莎阿

我是clojure的新手(和该函数的程序设计),我正在尝试做一些基本的问题。我试图在没有递归的序列中找到第n个元素。

所以像

(my-nth '(1 2 3 4) 2) => 3

我很难遍历列表并在找到第n个元素时返回。我尝试了多种方法,最终得到的代码是

(defn sdsu-nth
 [input-list n]
 (loop [cnt n tmp-list input-list]
    (if (zero? cnt)
       (first tmp-list)
       (recur (dec cnt) (pop tmp-list)))))

这给了我一个例外,上面写着“无法从空列表弹出”

我不需要代码,但是如果有人可以指出正确的方向,那将真的很有帮助!

噪音史密斯

您正在使用函数pop,对于不同的数据结构,该函数具有不同的行为。

user> (pop '(0 1 2 3 4))
(1 2 3 4)
user> (pop [0 1 2 3 4])
[0 1 2 3]
user> (pop (map identity '(0 1 2 3 4)))
ClassCastException clojure.lang.LazySeq cannot be cast to clojure.lang.IPersistentStack  clojure.lang.RT.pop (RT.java:640)

此外,您正在将的呼叫pop与的呼叫在一起first如果进行迭代,请将peek/popfirst/rest成对使用,将两者混合使用可能会导致意外结果。first/rest是最低的公分母,如果您想对各种顺序类型进行概括,请使用它们,它们将强制顺序起作用。

user> (first "hello")
\h
user> (first #{0 1 2 3 4})
0
user> (first {:a 0 :b 1 :c 2})
[:c 2]

使用您的函数替换poprest,我们将获得预期的结果:

user> (defn sdsu-nth
        [input-list n]
        (loop [cnt n tmp-list input-list]
              (if (zero? cnt)
                  (first tmp-list)
                (recur (dec cnt) (rest tmp-list)))))

#'user/sdsu-nth
user> (sdsu-nth (map identity '(0 1 2 3 4)) 2)
2
user> (sdsu-nth [0 1 2 3 4] 2)
2
user> (sdsu-nth '(0 1 2 3 4) 2)
2
user> (sdsu-nth "01234" 2)
\2

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在序列中每隔 n 重复第 n 个元素

来自分类Dev

在Blazor应用中手动更新特定的html元素

来自分类Dev

“手动”链表java中的元素总和

来自分类Dev

手动排序列表

来自分类Dev

找到满足条件的第n个元素?

来自分类Dev

是否需要手动删除手动添加到React组件中的元素的事件侦听器?

来自分类Dev

如何在Flutter中手动分配Listview.builder的第一个元素?

来自分类Dev

手动加载框架元素

来自分类Dev

手动'\ t'转义序列与四个空格有何不同?

来自分类Dev

在 Clojure 中模拟第 n 个

来自分类Dev

如何在Api-Platform中手动将资源序列化到Json?

来自分类Dev

如果PHPUnit是在引导程序中自动/手动加载的,则无法找到测试类

来自分类Dev

在RxSwift中手动处置DisposeBag

来自分类Dev

在ggplot中手动分配颜色

来自分类Dev

R中的手动皮尔逊相关

来自分类Dev

opencv中的手动灰度太慢

来自分类Dev

在FOSUserBundle中手动设置密码

来自分类Dev

在RabbitMQ中手动确认消息

来自分类Dev

手动修复NPM中的漏洞

来自分类Dev

ggplot中的线型手动更改

来自分类Dev

在Pytorch中手动更新权重

来自分类Dev

在coefplot中手动排序系数

来自分类Dev

雷鸟中的“手动线程”?

来自分类Dev

在sbt中手动调用sourceGenerators

来自分类Dev

SonarQube中的手动度量/指标

来自分类Dev

在Moodle中手动复制文件

来自分类Dev

手动在Refind中输入hdbios

来自分类Dev

在Linux中手动重启风扇

来自分类Dev

Scheme中的手动函数调用