seq 和 list 之间的区别

2024-04-18

Clojure 语言中的 seq 和列表有什么区别?

(list [1 2 3]) => ([1 2 3])
(seq [1 2 3]) => ([1 2 3])

这两种形式似乎被评估为相同的结果。


首先,它们可能看起来相同,但实际上并非如此:

(class (list [1 2 3])) => clojure.lang.PersistentList
(class (seq [1 2 3])) => clojure.lang.PersistentVector$ChunkedSeq

list通常是一个实现,而seq始终是一个抽象。

seqs和lists的区别在于以下三个方面,如Clojure 编程 http://www.clojurebook.com/

1. 获取 seq 的长度可能会很昂贵:

例如从Clojure 编程

(let [s (range 1e6)]
  (time (count s))) => 1000000
; "Elapsed time: 147.661 msecs"

(let [s (apply list (range 1e6))]
  (time (count s))) => 1000000
; "Elapsed time: 0.03 msecs

因为列表总是保存其自身长度的记录,所以对列表进行计数的操作花费恒定的时间。然而,seq 需要遍历自身来检索它的count.

2. seqs 可以是惰性的,而列表则不能。

 (class (range)) => clojure.lang.LazySeq
 (class (apply list (range))) ;cannot be evaluated
 ; "java.lang.OutOfMemoryError: GC overhead limit exceeded"

3. seq 可以是无限的,因此不可数,而列表总是可数的。

此外,列表是它们自己的 seq(实现细节):

(class (seq '(1 2 3))) => clojure.lang.PersistentList

人们总是可以使用以下命令创建一个 seqcons。查看更多信息这个帖子 https://stackoverflow.com/questions/3008411/clojure-seq-cons-vs-list-conj对于之间的差异cons and conj.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

seq 和 list 之间的区别 的相关文章

  • 从 Json Python 获取特定字段值

    我有一个 JSON 文件 我想做的是获取这个特定字段 id 问题是当我使用json load input file 它说我的变量data是一个列表 而不是字典 所以我不能做类似的事情 for value in data id print d
  • Clojure 中 with-local-vars 和 with-bounds 之间的区别

    Clojure 的文档with local vars http clojuredocs org clojure core clojure core with local vars and with bindings http clojure
  • 如何创建仅包含某些可扩展项目的列表?

    我正在尝试编写一个包含一些可扩展项目和一些单个项目的列表 我希望拥有它 以便当单击单个项目或可扩展列表子项时 我可以根据该项目的文本调用意图 我认为可扩展列表可以工作 但是有没有办法在可扩展列表中设置项目 以便它们没有可扩展列表图标 我应该
  • Python - 在和不在列表中语法错误

    我正在尝试从另一个现有的浮点数列表构建一个新的浮点数列表 通过示例更容易识别第一个列表的预期内容 price list 39 99 74 99 24 99 49 99 预期的后期功能 print new price list gt gt 2
  • 在 Python 中使用列表理解来执行类似于 zip() 的操作?

    我是一名 Python 新手 我想做的事情之一就是围绕列表理解进行思考 我可以看到这是一个非常强大的功能 值得学习 cities Chicago Detroit Atlanta airports ORD DTW ATL print zip
  • 根据多个值过滤字典列表

    我有一个字典列表 我想根据多个条件进行过滤 该列表的简化版本如下所示 orders name v price 123 location Mars name x price 223 location Mars name x price 124
  • 将向量作为绑定传递给 for 宏时出现问题

    我有任意数量的列表 我想使用 for 宏来处理它们 我想创建一个传递向量作为绑定的函数 因为列表的数量各不相同 如果我对绑定进行硬编码 它会按我的预期工作 gt def list1 pink green gt def list2 dog c
  • Emacs/Swank/Paredit for Clojure 的温和教程

    我要转向 Emacs 来工作Clojure http en wikipedia org wiki Clojure Lisp 为了能够执行以下操作 我需要在 Emacs 上设置哪些信息 自动匹配 生成相应的右括号 自动缩进 Lisp Cloj
  • 在Python中将整数附加到列表的开头[重复]

    这个问题在这里已经有答案了 如何在列表的开头添加一个整数 1 2 3 42 1 2 3 gt gt gt x 42 gt gt gt xs 1 2 3 gt gt gt xs insert 0 x gt gt gt xs 42 1 2 3
  • 枚举和 Clojure

    在Java C世界中 人们经常使用枚举 如果我使用的是使用枚举的 Java 库 我可以在它们和关键字之间进行转换 例如 使用 java lang Enum valueOf e aget Ljava lang Enum e getEnumCo
  • python 中的基本矩阵转置

    我尝试了 python 中矩阵转置的最基本方法 但是 我没有得到所需的结果 接下来是代码 A 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 print A def TS A B A for i in range len A
  • 通过 id 从通用列表中删除对象

    我有一个像这样的域类 public class DomainClass public virtual string name get set public virtual IList
  • Java 阻止列表实现

    我在 SO 和 Google 上搜索了这个问题的答案 但到目前为止找不到合适的解决方案 我目前正在研究图形路由问题中的 LayerManager 管理器负责提供和重置一组固定的层 我想使用阻止列表来实现消费者 生产者模式 以便只要没有可用的
  • 省略号列表[...]并将列表连接到自身[重复]

    这个问题在这里已经有答案了 EDIT 我在最初的例子中很粗心 当我添加列表时不会发生该行为A本身 而是当我添加一个列表时含有 list A to A本身 请参阅下面更正的示例 我试图理解省略号如何列出 那些显示为 当你有一个列表引用本身时发
  • 将不同类型的对象与可比较的对象进行比较

    A java public class A implements Comparable private String id private String name public A String a String b id a name b
  • 如何在 LINQ 中执行 String.Replace?

    这是我正在尝试做的事情 但没有成功 我想打电话from x in list1 and join y in list2 where regex Match x Value Success 完成这些步骤后我需要打电话String Replace
  • Python 有不可变列表吗?

    python 有不可变列表吗 假设我希望具有元素有序集合的功能 但又想保证它不会改变 如何实现呢 列表是有序的 但它们可以改变 是的 它被称为一个tuple 所以 而不是 1 2 这是一个list并且可以突变 1 2 is a tuple并
  • 如何在 C# 中使用窗口窗体创建动态下拉列表

    我正在尝试为朋友的手机商店构建一个简单的库存程序 我想使用C 并访问数据库来存储数据 DB 将有 2 个主要列表 devices 品牌 型号 颜色 价格 库存 最小库存 parts 品牌 型号 描述 库存 最小库存 GUI 将使用多个下拉列
  • 为什么 Clojure MySQL 查询结果中出现“M”

    我有一个返回一行的 Clojure 查询 下面是返回行 映射 的部分打印输出 employer percent 0 00M premium 621 44M 这两列在mysql表中分别是decimal 5 2 和decimal 7 2 为什么
  • 如何使用 tweepy 仅提取主题标签中的文本?

    我想为我的情感分析项目提取主题标签 但是我得到了一个字典列表 其中包含所有主题标签及其在推文中的索引 我只想要文字 我的代码 data tweepy Cursor api search q since a i until b i items

随机推荐

  • 驯服 Windows 10 Edge 浏览器中的自动电话号码功能

    即使系统上没有安装电话应用程序 Windows 10 的边缘浏览器似乎也会检测电话号码 它将电话号码格式化为带有下划线的蓝色 即使它只是在某个地方的纯文本中 在某些背景上很难看 而且它还检测到例如增值税号码就像电话号码一样 那么作为网站管理
  • 在 Rstudio 中的 RMarkdown 中循环生成 pander 表

    我使用类似于下面的代码片段的代码生成了一组表 r tables echo TRUE eval TRUE require reshape2 require pander data mtcars data AirPassengers dta l
  • Android 2.2 中“不受信任的服务器证书”,但 3.0 中没有

    我正在使用 BouncyCastle 提供程序和 Apache HttpClient 来信任 SSL 证书 如 Antoine Hauck 所描述here http blog antoine li index php 2010 10 and
  • android:icon="@drawable/my_icon" 和 android:icon="?my_icon" 之间的区别? [复制]

    这个问题在这里已经有答案了 我通常在 xml 中将drawable设置为android icon drawable my icon 但在一些项目中我看到了代码android icon my icon 有什么区别android icon dr
  • AT+CMGS 无法正常工作

    我在发送短信时遇到 AT 命令问题 AT CMGS 发送后AT CMGS
  • 将 mongodb 与 neo4j 集成,是否有任何 API 可以链接它们?

    我正在研究推荐引擎 用户数据被收集 他们的友谊 位置 喜欢 教育 并已存储在 mongodb 中 我需要向这些用户推荐相关产品 我计划使用 Neo4j 作为推荐引擎 原因很明显 易于节点之间的遍历 路径信息 问题是我必须首先将 mongod
  • ResultReceiver 给出 Nullpointer 异常

    我正在使用地理编码来检索纬度 经度值的地址 我在扩展 IntentService 的单独类中实现此地理编码 当我检索地址时 我想将其发送回原始主要活动 为此我使用 ResultReciever 并实际上遵循tutorial https de
  • 如何通过HTTP Google Cloud Function上传图像文件?

    我已阅读有关如何将图像上传到存储桶并通过后台功能进行后期处理的教程 但我的要求是上传图像 进行后处理并立即通过HTTP函数返回结果 请让我知道这是否是正确的方法 因为我在网上没有得到太多关于这方面的材料 以下是我的做法 HTTP云功能 ex
  • Github v3 API 让所有组织超过 100

    我正在尝试让所有组织项目通过 默认大小似乎是 30 而 100 似乎是每个请求的最大限制 但上面的链接仍然只返回前 100 项 即不是第 101 200 项 我也尝试过 http host api v3 organizations page
  • 以编程方式截取网页屏幕截图[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • WPF 3D 旋转球体 GUI

    我一直在尝试在 WPF 中为我的课堂作业制作 3D 用户界面 但遇到了一个问题 现在 2 3 天都无法解决 我尝试用谷歌搜索答案 我查看了一些 stackoverflow 帖子 但还没有一个可以帮助我解决问题 情况是这样的 我有一个 3D
  • 如何在 xcode 中打印或查看方法调用堆栈?

    我正在开发我的 iPad 应用程序 运行代码时 表视图中有一种方法 据我们所知 cellForRowAtIndexPath 该方法可以被调用多次 就像一会儿 scrolling table view cells Or table view
  • mysqli_stmt::bind_param():类型定义字符串中的元素数量与绑定变量的数量不匹配,无法更新

    我在提交或更新此数据时遇到问题 数据无法更新 这段代码 if isset GET newsid if isset POST submit sql connect gt prepare UPDATE news set title short
  • Rails:特定 HTTP 错误代码的自定义行为

    我正在开发一个 RoR 网站 希望单独处理服务器错误 400 404 500 等 另外 由于网站是动态的 我想在 Rails 环境中处理错误 而不是在服务器级别 我想做的一个例子是 当用户遇到无法加载或根本不存在的页面或模板时 向用户提供可
  • 从Excel VBA中的单元格范围中删除重复项

    我正在尝试删除 Excel 2013 VBA 中的重复项 但我收到错误 对象不支持此属性或方法 问题是我没有静态范围可供选择 我想从列标题 abcd 中删除重复项 Cells Find what abcd Activate ActiveCe
  • 检查数组中是否存在值(Laravel 或 Php)

    我有这个数组 list desings ids array hc1wXBL7zCsdfMu dhdsfHddfD otheridshere 使用 die var dump 这个数组返回我 array 2 0 gt hc1wXBL7zCsdf
  • Socket.IO中的跨域连接

    是否可以跨域方式使用Socket IO 如果是这样 怎么办 网络上提到了这种可能性 但没有给出任何代码示例 引用socket io 常见问题解答 http socket io faq Socket IO支持跨域连接吗 当然 在每个浏览器上
  • 创建一个加载器,其中线在中心形成一个圆

    这是我的代码 circle border 1px solid transparent border radius 50 width 100px overflow hidden div7 width 100px height 10px bac
  • 正确使用 zend 框架中的语言

    我有一个带有两个模块 管理和公共 的 Zend 应用程序 对于公共 我有以下插件来解析我的友好 URL class Custom Controller Plugin Initializer extends Zend Controller P
  • seq 和 list 之间的区别

    Clojure 语言中的 seq 和列表有什么区别 list 1 2 3 gt 1 2 3 seq 1 2 3 gt 1 2 3 这两种形式似乎被评估为相同的结果 首先 它们可能看起来相同 但实际上并非如此 class list 1 2 3