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

lazy-seq的分步示例

苏承载
2023-03-14

对于一个简单的lazy-seq,只取一个参数(比如2的幂的列表),如果我用5和8来命名它呢?只是缓存了这两个值吗?

创建和缓存一个无限列表来获得一个无限结构,如果缓存我已经调用懒惰函数的每一个输入都会破坏内存,那么创建和缓存一个无限列表又有什么意义呢?

因为它说它会在以后的每个调用中缓存结果...带's'的。

可以在运行时以某种方式跟踪此行为吗?

共有1个答案

欧阳哲
2023-03-14

这里有一个玩具示例,它显示了运行时发生的事情:

(defn times-two[number]
 (print "- ")
 (* 2 number))

(def powers-of-two (lazy-cat [1 2] (map times-two (rest powers-of-two))))

(println (take 10 powers-of-two))
(println (take 12 powers-of-two))

输出应该是:

(1-2-4-8-16-32-64-128-256 512)

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

  • 我试图从继承的一些迭代Java库代码中创建一个Clojure seq。基本上,Java代码所做的是使用解析器从文件中读取记录,将这些记录发送到处理器,并返回结果的ArrayList。在Java中,这是通过调用parser.readdata(),然后调用parser.getRecord()获取一条记录,然后将该记录传递给processor.processRecord()来完成的。对parser.re

  • 描述 (Description) 方法tuple()将项列表转换为元组 语法 (Syntax) 以下是tuple()方法的语法 - tuple( seq ) 参数 (Parameters) seq - 这是一个要转换为元组的序列。 返回值 (Return Value) 此方法返回元组。 例子 (Example) 以下示例显示了tuple()方法的用法。 #!/usr/bin/python aLi

  • 描述 (Description) 方法extend()将seq的内容追加到list。 语法 (Syntax) 以下是extend()方法的语法 - list.extend(seq) 参数 (Parameters) seq - 这是元素列表 返回值 (Return Value) 此方法不返回任何值,但将内容添加到现有列表。 例子 (Example) 以下示例显示了extend()方法的用法。 #!

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