在 Clojure 中模拟第 n 个

特伦斯布兰农

第 21 个 4clojure 问题要求您实现nth.

但是我尝试实现它:

(defn my-nth
  ([s 0] (first s))
  ([s n] (recur s (- n 1))))

导致错误“不支持的绑定形式:0”

有人可以解释为什么这是错误以及如何修复它吗?

伊万·格里沙耶夫

在函数的参数中,不能指定值,只能指定符号。可能你从 Haskell 借用了那个语法,你可以在那里做到这一点。但不是在 Clojure 中。

在您的示例中,代码如下所示:

(defn nth-my [coll index not-found] 
  (if (zero? index)
    (if (empty? coll)
      not-found
      (first coll))
    (recur (rest coll) (dec index) not-found)))

用法:

user> (nth-my [1 2 3] 0 "dunno")
1
user> (nth-my [1 2 3] 1 "dunno")
2
user> (nth-my [1 2 3] 2 "dunno")
3
user> (nth-my [1 2 3] 4 "dunno")
dunno

欢迎您通过以下方式对其进行改进:

  • 检查负指数;要么nil立即返回(或默认),要么以相反的顺序从集合的末尾开始;

  • 在未提供默认值时添加一个额外的主体(nil未通过时添加);

  • 可能使用循环/递归形式每次不传递最后一个默认参数。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Clojure中删除集合中的第n个项目?

来自分类Dev

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

来自分类Dev

如何从Clojure的集合中获取n个随机项?

来自分类Dev

Clojure-适用于除第n个元素以外的所有元素

来自分类Dev

Clojure循环通过从第n个元素开始的向量而不是0

来自分类Dev

迭代器中的第n个元素

来自分类Dev

R中的累积第n个项目

来自分类Dev

编辑列表中的第N个项目

来自分类Dev

html怀疑中的第n个孩子

来自分类Dev

列表中的第n个值重复

来自分类Dev

第n个孩子中的变量

来自分类Dev

html怀疑中的第n个孩子

来自分类Dev

迭代器中的第n个元素

来自分类Dev

XPath:TR 中的第 N 个 TD

来自分类Dev

Clojure中的函数,它接受n个字母的列表并返回一个列表

来自分类Dev

Clojure中的函数,它接收n个字母的列表并返回一个列表

来自分类Dev

jQuery选择第n个孩子中的第n个孩子

来自分类Dev

某行中第n个出现第n个符号后匹配数字

来自分类Dev

Scala从数组/ RDD中选择第n个元素中的第n个元素

来自分类Dev

每一个?Clojure中的身份

来自分类Dev

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

来自分类Dev

如何将数组中的第n个项目带到数组中的第z个项目?

来自分类Dev

如何从第(nx)个值中减去列中的第n个值?

来自分类Dev

从第ith个元素到第j个元素提取元素范围,直到列表中的第n个元素

来自分类Dev

在Fortran中,如何从数组中删除第N个元素?

来自分类Dev

Excel - 从相应的数据中获取第 2 个或第 n 个匹配的字符串

来自分类Dev

从Python中不同列表中的第n个项目中减去列表中的第n个项目

来自分类Dev

如何在div中包装第n到第n个元素

来自分类Dev

将第N行文本发送到列表中的第N个地址

Related 相关文章

热门标签

归档