当前位置: 首页 > 知识库问答 >
问题:

lazy-seq中的(list)会导致无限递归,但(cons)不会

赫连骏
2023-03-14
(defn zeroes []
  (list 0 (lazy-seq (zeroes))))

(take 5 (zeroes)) ; too much recursion error
(defn zeroes []
  (cons 0 (lazy-seq (zeroes))))

(take 5 (zeroes))  ; returns (0 0 0 0 0)
(defn zeroes []
  (cons 0 (lazy-seq (zeroes))))

(zeroes)  ; hangs the repl

共有1个答案

羊舌光赫
2023-03-14

你问了两个问题...

1)为什么在下面的代码中使用list而不是cons会导致无限递归?

(defn zeroes []
  (cons 0 (lazy-seq (zeroes))))

(take 5 (zeroes)) ; too much recursion error
(0 0 0 0 ...)
'(0 (0 (0 (0 (...))))

2)为什么下面的发散(挂起)而不是像我们上面看到的那样抛出“太多递归”错误?

(defn zeroes []
  (cons 0 (lazy-seq (zeroes))))

(zeroes)  ; hangs the repl
 类似资料:
  • 我对react钩子和效果有点陌生,在使用useEffect时遇到了问题 上面的代码是我构建的useEffect,用于使用axios获取数据库中的所有数据,并且我将所有数据放在一个称为reports的状态中。 但是当我console.log报告时,它会导致无限循环。我不知道为什么? 让我给你看一个我做的简单动作。 我正在做一个按钮,当它被点击时,报告的状态(按id)将被更新。 这是该州报告结构的样本

  • 描述 (Description) 方法list()接受序列类型并将它们转换为列表。 这用于将给定元组转换为列表。 Note - 元组与列表非常相似,唯一的区别是元组的元素值不能更改,元组元素放在括号之间而不是方括号。 语法 (Syntax) 以下是list()方法的语法 - list( seq ) 参数 (Parameters) seq - 这是一个要转换为列表的元组。 返回值 (Return

  • 有人知道怎么做吗?如有任何帮助,不胜感激 问候,

  • 我使用Google Endpoint创建了一个应用服务器,它是一个即时消息应用程序的后端。每个用户都有一个好友列表。 当我创建一个新朋友时,我使用下面的方法将用户添加到彼此的朋友列表中。然而,由于循环依赖关系,当我添加朋友时,它给了我以下错误。 我看了贴出的其他问题和解决方案。他们中的大多数人结构不同,他们没有解决我的问题。 这个网站的一个答案是建议添加,但我没有任何字段可以添加。我试图放置,但我

  • 对于一个简单的lazy-seq,只取一个参数(比如2的幂的列表),如果我用5和8来命名它呢?只是缓存了这两个值吗? 创建和缓存一个无限列表来获得一个无限结构,如果缓存我已经调用懒惰函数的每一个输入都会破坏内存,那么创建和缓存一个无限列表又有什么意义呢? 因为它说它会在以后的每个调用中缓存结果...带's'的。 可以在运行时以某种方式跟踪此行为吗?

  • 我得到了错误下的无限递归。 下面是我的代码 另一个班 我无法理解为什么在UI上获取此值时会出现此错误。