在列表中查找元素的Scheme 函数是什么?

2024-01-03

我有一个元素列表 '(a b c),我想查找其中是否有(真或假)x,例如,其中 x 可以是 'a 或 'd。有为此的内置函数吗?


如果您需要使用内置等价运算符之一进行比较,您可以使用memq, memv, or member http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-9.html#%_idx_428,取决于您是否想使用寻找相等性eq?, eqv?, or equal? http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-9.html#%_sec_6.1, 分别。

> (memq 'a '(a b c))
'(a b c)
> (memq 'b '(a b c))
'(b c)
> (memq 'x '(a b c))
#f

正如您所看到的,如果这些函数找到一个元素,它们就会返回从第一个匹配元素开始的子列表。这是因为,如果您正在搜索可能包含布尔值的列表,则需要能够区分查找的情况#f从没有找到您正在寻找的元素的情况来看。列表是一个真值(Scheme 中唯一的假值是#f)所以你可以使用结果memq, memv, or member在任何需要布尔值的上下文中,例如if, cond, and, or or表达。

> (if (memq 'a '(a b c))
     "It's there! :)"
     "It's not... :(")
"It's there! :)"

这三种不同的功能有什么区别?它基于他们使用哪个等价函数进行比较。eq?(因此memq) 测试两个对象是否是同一个底层对象;它基本上相当于指针比较(或整数情况下的直接值比较)。因此,看起来相同的两个字符串或列表可能并不相同eq?,因为它们存储在内存中的不同位置。equal?(因此member?)对列表和字符串进行深度比较,因此基本上打印相同内容的任何两个项目都将是equal?. eqv?就好像eq?除了数字之外几乎任何东西;对于数字,两个在数值上相等的数字总是eqv?,但他们可能不是eq?(这是因为 bignum 和有理数,它们的存储方式可能不会被eq?)

> (eq? 'a 'a)
#t
> (eq? 'a 'b)
#f
> (eq? (list 'a 'b 'c) (list 'a 'b 'c))
#f
> (equal? (list 'a 'b 'c) (list 'a 'b 'c))
#t
> (eqv? (+ 1/2 1/3) (+ 1/2 1/3))
#t

(Note that some behavior of the functions is undefined by the specification, and thus may differ from implementation to implementation; I have included examples that should work in any R5RS compatible Scheme that implements exact rational numbers)

如果您需要使用与内置谓词不同的等价谓词来搜索列表中的项目,那么您可能需要find http://srfi.schemers.org/srfi-1/srfi-1.html#find or find-tail http://srfi.schemers.org/srfi-1/srfi-1.html#find-tail来自 SRFI-1:

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

在列表中查找元素的Scheme 函数是什么? 的相关文章

  • 方案let语句

    在函数式编程语言scheme中 没有赋值语句 但在一个let陈述 let x 2 x 3 您正在分配2 to x 那么为什么这不违反函数式编程中没有赋值语句的原则呢 Scheme 是一种函数式编程语言 这一说法是不正确的 在Scheme中
  • Lisp 内部引用工作

    口齿不清是如何做到的quote内部工作 例如 quote 1 1 2 似乎相当于 list 1 list 1 2 这意味着它是如何递归地象征 Head 值的 这个功能是内置的吗 Run equal quote 1 1 2 list 1 li
  • 以下函数式编程模式的正确术语是什么?

    我听说它被称为stream http mitpress mit edu sicp full text sicp book node72 html as an 无限列表 http en wikibooks org wiki Clojure P
  • Lisp 当前内存使用情况

    我需要从 Common Lisp 程序中找出当前使用了多少内存 我知道没有可移植的方法 标准函数room以文本形式将信息打印到标准输出 而不是将其作为值返回 但是sb kernel dynamic usage在 SBCL 工作 其他 Com
  • 将自然数转换为特定基数并将其作为列表返回

    我想将函数的结果显示为列表而不是数字 我的结果是 define lst list define num gt base n b if zero n append lst list 0 append lst list 10 num gt ba
  • CLISP - 反转简单列表

    我必须反转简单 单维 列表的元素 我知道有一个内置的反向函数 但我不能用它来做这个 这是我的尝试 defun LISTREVERSE LISTR cond lt length LISTR 2 LISTR listr is 1 atom or
  • 在 Parenscript 中使用 regex(正则表达式)

    我正在尝试 Parenscript 在尝试使用正则表达式函数时 我得到了意外的输出 例如 参考手册 https common lisp net project parenscript reference html shows regex f
  • 如何定义和使用 Common Lisp 包(库)?

    我在几个 Lisp 源文件中开发了一些 Common Lisp 函数 我希望这些函数可以轻松地供我编写的其他函数使用 或者如果我认为它们对其他人有用的话 可以在 github 上提供 现在 我只是将它们放在一些预定义的文件夹中并使用 req
  • let* 和 set 之间的区别?在 Common Lisp 中

    我正在从事一个基因编程爱好项目 我有一个函数 宏设置 当以 setq setf 形式评估时 将生成一个如下所示的列表 setq trees make trees 2 gt x abs x 然后它将绑定到 lambda 函数
  • 使用包阴影符号

    例如 我有这个包定义 它遮蔽了 COMMON LISP LISTEN defpackage shadows use common lisp shadow listen export listen 然后我想使用另一个包中的这个包 比如说 de
  • 如何在方案中向后打印字符串?

    我知道如果我按照以下方式编写方案代码并输入 单词 a b c 它将以相同的顺序输出列表 您能告诉我是否有一种方法可以以相反的顺序打印出来 例如 列出 c b a 它需要是我以相反顺序打印出来的用户输入 所以 我不能称之为 反向 a b c
  • 有没有一种简单的方法可以使用 Common Lisp 中的 Python 库?

    在编写 Common Lisp 代码时我真正怀念的一件事是访问 Python 库 包括标准库和第三方模块 CLPython 提供了 Python 功能的有限子集 这阻止了大多数库的使用 因此这对我来说并不是很有用 我希望能够从 Common
  • 在Emacs中,这个错误是什么意思? “警告:运行时需要 cl 包”

    我正在字节编译一个模块 它给了我这个警告 Warning cl package required at runtime 为什么这是一个警告 我很清楚我正在使用cl包裹 事实上有一个 require cl 模块中的语句 使用有什么问题吗cl
  • CMake:如何在多个文件上运行自定义命令来生成源文件?

    我有以下情况 我想编译一些Scheme文件Gambit https github com gambit gambit成可执行文件 为此 我使用 gambit 将所有计划文件翻译 生成为 C 和目标文件 然后将其编译并链接为可执行文件 假设我
  • 如何获取 SICP、Scheme、练习 2.78 等中的 put 和 get 函数

    我正在尝试在 SICP 中做练习 2 78 但 put 和 get 函数未知 我尝试过多种语言 比如相当大 racket r5rs mit scheme mzscheme等 我什至下载了SICP支持 http www neilvandyke
  • 方案语言:合并两个数字

    如何将列表中的两个整数合并为一个 方案中 例子 11 223 gt 11223 假设列表恰好有两个元素 并且都是数字 define merge numbers lst let 1st number gt string first lst 2
  • Scheme/Lisp 嵌套循环和递归

    我正在尝试解决方案中的一个问题 该问题要求我使用嵌套循环或嵌套递归 例如我有两个列表 我必须检查它们的笛卡尔积的条件 解决这些类型问题的最佳方法是什么 有关如何简化这些类型的函数的任何指示吗 I ll elaborate a bit sin
  • 使用map或reduce或filter,在Scheme中,计算列表中有多少个元素[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 number length 1 1 0 1 0 0 这假设返回 6 我知道如何使用长度并找到它 但我不知道如何在没有长度的情况下使用映射或过
  • 从when语句内的函数返回

    我想做的就是使用 when 语句返回一个值 我想要以下功能 if x return y 我正在尝试使用 when x y 但是when语句并没有以退出函数并返回y的方式进行计算 它只是愉快地继续下一行 有没有办法做到这一点而不需要制作一个看
  • 学习 Lisp 的资源 [关闭]

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

随机推荐

  • 使用 Highcharts.js 创建打孔卡样式图表

    我想通过 highcharts 复制 github 上呈现的 打孔卡 样式图 我真的很挣扎这个问题 这是一个jsfiddle http jsfiddle net CA2cT 1 这开始让我到达那里 我宁愿在 y 上花几天时间 在 x 上花时
  • 默认显示当前位置注释

    我在 Mapkit 中显示了当前位置注释 蓝点 粘贴蓝点后注释显示 当我启动视图时 如何让注释默认显示 敲击销钉 void mapView MKMapView mv didAddAnnotationViews NSArray views f
  • 从一个类获取值以在另一个类中使用它(java)

    我有两节课 ABC 班上 double a 0 5 public double lala return a 我想在另一个类中使用它 比如说 DEF 类 ABC abc double baba abc lala 但它说 java lang N
  • 如何在 OS X Yosemite 中开发状态栏应用程序?

    我一直在尝试为 Yosemite 开发一个状态栏应用程序 这是我的第一个 OS X 应用程序 但是当我搜索该文档时 NSStatusItem文档说几乎所有的属性和方法 例如 title highlightMode and image 在 O
  • NDepend - 寻找死方法

    我有两个公共方法 A 和 B 我修改了 CQL 以向我显示公共方法和死方法 如果 B 仅被 A 调用 并且 A 作为死方法 在应用程序中的任何地方都没有调用或引用 NDepend 是否可以通过进行一些设置或通过 CQL 将这两个方法显示为死
  • PHP5 中有效且可读的注释方法是什么?

    在我学习 PHP 的过去 2 个月里 我发现了不止两种人们用来注释代码的风格 我没有看到太多的一致性 我认为这通常意味着艺术家在工作 所以我想知道 仍然可读 实用的有效评论方式是什么 在一个地方并排查看所有有效的可能性将提供我正在寻找的改进
  • 以编程方式绘制 OpenCV 色调曲线

    我想实现像色调曲线这样的东西 I have predefined set of curves that I should apply to the image For instance 据我了解 在此图表中 我们看到当前音调值与新音调值的依
  • 导航栏隐藏不工作 IOS

    大家好 我是 iOS 开发新手 我有一个主屏幕 导航栏隐藏 从那里我使用后转导航到另一个视图 但是当我单击返回时 它在主屏幕上显示导航栏 这是我的问题描述 在主屏幕 onviewload 中我正在做 self navigationContr
  • 将 docker-compose.yml 文件转换为 kubernetes

    我正在使用运行以下命令的 kompose 将 docker compose 文件转换为 kubernetes kompose 转换 f docker compose yml to kubernetes image yaml 命令完成后 输出
  • Python 2 中 dict.items() 和 dict.iteritems() 有什么区别?

    之间是否存在任何适用的差异dict items http docs python org library stdtypes html dict items and dict iteritems http docs python org li
  • Vim:在视觉模式下选择文本块的更快方法

    I have been using vim for quite some time and am aware that selecting blocks of text in visual mode is as simple as SHIF
  • 在 Ubuntu Server 16.04 上安装 CouchDB 2.1

    有谁知道如何在 Ubuntu Server 16 04 上安装 CouchDB 手册中的CouchDB 文档 http docs couchdb org en 2 1 0 install unix html似乎被打破了 一个简单的apt g
  • 同一台计算机上的两个 GitHub 帐户

    首先 我知道这个问题已经被问过并回答了好几次 但是我找到的所有解决方案都不起作用 任务非常简单 我有两个 GitHub 帐户 一个是个人帐户 第二个是商业帐户 我尝试使用一些配置 但都是这样的 Host github com persona
  • 使用“scale_x_log10”时,如何将“geom_text”准确映射到“geom_bin2d”?

    关于如何标记计数的一个很好的答案geom bin2d 可以在这里找到 使用 R 获取热图中 bin 的计数 https stackoverflow com questions 28771018 getting counts on bins
  • 什么是全球交易?

    JSR 907 JTA 1 2定义 全局事务 术语 UserTransaction begin 方法启动一个全球交易和 将事务与调用线程关联起来 这意味着什么 是最外面的事务还是什么 基本上 本地事务和全局事务之间的区别在于资源限制 全局事
  • MVC 区域不渲染 _Layout

    我有 NET CORE 2 2 的 MVC 项目我在项目中添加了区域 它在本地计算机中可以正常工作 当应用程序成功发布时 我使用 Azure Devops 设置 CI CD 管道 我注意到我的区域渲染不正确 下面的内容来自 azure 网站
  • 如何在 Excel 中使用 VBA 创建和填充 ActiveX 组合框。

    我在尝试在 Excel 的 vba 中创建并填充 ActiveX 组合框时遇到问题 下面的代码在作为两个单独的宏运行时有效 但是当我尝试将两者放在一起时 会创建一个空的组合框 谁能告诉我这是为什么以及如何克服这个问题 提前致谢 杰威 Sub
  • Nvidia NPP nppiFilter 在与 2d 内核卷积时产生垃圾

    Nvidia 性能基元 NPP http developer nvidia com cuda nvidia performance primitives提供了nppiFilter用于将用户提供的图像与用户提供的内核进行卷积的函数 对于一维卷
  • 在 Debian Squeeze 上升级 phpmyadmin(和其他软件包)

    我刚刚使用 Debian Squeeze 最新稳定版本 6 0 4 设置了一个新的虚拟机 我想要一个网络服务器 所以我安装了常用的 apache php5 mysql phpmyadmin 等 一切都很顺利 一切正常 我的问题是关于升级包的
  • 在列表中查找元素的Scheme 函数是什么?

    我有一个元素列表 a b c 我想查找其中是否有 真或假 x 例如 其中 x 可以是 a 或 d 有为此的内置函数吗 如果您需要使用内置等价运算符之一进行比较 您可以使用memq memv or member http www scheme