为什么“(def 元音?(set“aeiou”))”有效?

2024-04-27

我正在看优秀的 Clojure 教程here http://ociweb.com/jnb/jnbMar2009.html。在其中一个示例中,它具有如下所示的 Clojure 代码:

(def vowel? (set "aeiou"))

这使得元音对于元音返回 true,对于辅音返回 false:

(vowel? (first "abc")) ; => true
(vowel? (first "cba")) ; => false

为什么是这样?我假设它与变量名称后面的问号有关。在教程中找不到任何内容......


Edit我才发现vowel?不返回 true 或 false,而是返回元素本身或 nil。看我自己的回答。


这与地图(Clojure 中最自然的对象)的工作方式完全相似。当映射作为函数调用时,它作为映射工作:

user=> (def ob {:foo "bar", :bar :baz, :qwerty 42})
#'user/ob
user=> (ob :foo)
"bar"

因此,Clojure 集可以作为函数调用,并且可以用作成员资格测试,这是有道理的。顺便说一句,如果您使用关键字(那些以冒号开头的东西)作为映射的键,它们也可以用作类似的函数,所以您可以这样做

user=> (:bar ob)
:baz

甚至对于关键字集也是如此:

user=> (def vowel-keywords (set [:a :e :i :o :u]))
#'user/vowel-keywords
user=> (:a vowel-keywords)
:a
user=> (:b vowel-keywords)
nil

但是,同样,后一个技巧仅适用于关键字,不适用于您可能用作映射中的键或集合中的成员的任何其他内容。

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

为什么“(def 元音?(set“aeiou”))”有效? 的相关文章

  • 尾递归函数上的 StackOverflowError

    当我使用 avg bids 4000 10 5 调用以下 Clojure 代码时 会导致 java lang StackOverflowError 我试图找出原因 因为 sum bids 是作为尾递归函数编写的 所以应该可以工作 使用 Cl
  • Clojure 是否有命名私有函数的约定?

    当我在 Clojure 中定义私有函数时 我通常使用 前缀作为视觉指示符 表明该函数不能在我的命名空间之外使用 例如 defn name let formatter formatter yyyy MM dd HH mm ss SSSS fo
  • 如何在 Clojure 中遍历一棵树,同时收集每个节点节点的值?

    我想创建一个函数来收集二叉树中每个节点的值 在 ClojureDocs 中 我发现了几个用于遍历树 图的函数 例如 tree seq prewalk 和 postwalk https clojuredocs org clojure core
  • Clojure 中的相互递归定义

    如何在 Clojure 中进行相互递归定义 下面是 Scala 中使用递归定义查找素数的代码 val odds Stream Int cons 3 odds map 2 val primes Stream Int cons 2 odds f
  • Clojure:避免埃拉托斯特尼筛中的堆栈溢出?

    这是我在 Clojure 中实现的埃拉托斯特尼筛法 基于 SICP 流课程 defn nats from n iterate inc n defn divide p q zero rem q p defn sieve stream lazy
  • Clojure gen-class 返回自己的类

    我现在正在使用 Clojure 创建一个类对象 它有一个返回对象本身的方法 用Java编写的 我想要制作的对象是这样的 class Point public double x public double y public Point dou
  • 在 Clojure 中创建映射条目

    是什么built inClojure 方式 如果有 创建单个映射条目 换句话说 我想要类似的东西 map entry key value 换句话说 结果应该或多或少等于 first key value Remarks 当然 我已经尝试过谷歌
  • 是否有一个在线工具可以像 JSON 一样自动缩进和格式化 Clojure 代码?

    有很多在线工具可以获取 JSON 文本 并向您显示该文本的格式化和缩进格式 有些甚至更进一步 形成了一个漂亮的树状结构 http jsonviewer stack hu http jsonviewer stack hu 我们有类似的 Clo
  • 如何创建 Clojure 拉链

    我如何使用 Clojure Zipper 创建以下图表 vector zip A B C D E F 我努力了 vector zip A B C D E F 它返回 A B C D E F nil 这样对吗 是的这是对的 对您的代码的一些测
  • 为从 nginx 反向代理转发的请求添加唯一 id

    我们运行 nginx 作为反向代理 将请求转发到运行 Compojure 的 Clojure 应用程序 Compojure 是一个封装 Jetty 的库 为我们的应用程序提供服务 Web 请求的能力 目前 我们捕获 nginx 和 Cloj
  • 如何使用 core.async 在 Clojure 中写入日志文件?

    我想使用 core async 作为写入文件的记录器 因此我创建了一个 test txt 文件 将其粘贴在我的资源文件夹中并编写了以下代码 use clojure java io use clojure core async def pri
  • core.async不是违背Clo​​jure原则吗?

    我看到许多 Clo jure 程序员对新的 core async 库充满热情 尽管它看起来很有趣 但我很难看出它如何符合 Clojure 原则 所以我有以下问题 它在任何地方都使用可变状态 正如函数名称通过感叹号所暗示的那样 例如 alt
  • 为什么 clojure future 会阻塞主线程?

    我有一个简单的 lein 项目 其中 main包含一个未来 def f future 42 defn main args println f 当我跑步时lein run它打印42但不返回 我不明白为什么它不返回 如何得到lein run回来
  • 用于正则表达式匹配及其在字符串中的位置的紧凑 Clojure 代码

    斯图尔特 哈洛威举了个例子 re seq w The quick brown fox 作为在 Clojure 中查找正则表达式匹配项的自然方法 在他的书中 这种构造与匹配器上的迭代进行了对比 如果人们关心的只是一份比赛列表 那就太好了 但是
  • 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
  • 将向量作为绑定传递给 for 宏时出现问题

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

    我试图在我的 Clojure 程序中获取控制台输入 但是当它到达程序的该部分时它给我这个错误 Exception in thread main java lang ClassCastException clojure lang LineNu
  • Emacs/Swank/Paredit for Clojure 的温和教程

    我要转向 Emacs 来工作Clojure http en wikipedia org wiki Clojure Lisp 为了能够执行以下操作 我需要在 Emacs 上设置哪些信息 自动匹配 生成相应的右括号 自动缩进 Lisp Cloj
  • Clojure:让作用域和函数返回值

    我在弄清楚如何使用 let 形式时遇到了一些麻烦 在下面的示例中 我想在本地绑定值 cols 以便稍后在函数中处理它 然而 我注意到 如果我使用 let 函数 sel opt tmp 将返回 nil 值而不是列表 defn sel opt
  • 在抛出异常之前重试某件事 3 次 - 在 clojure 中

    我不知道如何在Clojure中实现这段Python代码 for i in range 3 try except e if i 2 raise e else continue else break 我想知道为什么在 Python 中如此简单的

随机推荐

  • Excel VBA 中的 TypeName 返回什么?

    我想检查一下数据类型 Cells 2 1 Value即 这里有什么 以下 我尝试了名称 整数 长整型等 但似乎不接受 If TypeName Cells r 1 Value WHAT GOES HERE Then MsgBox Yes El
  • 多列条件计数 SQL

    我正在尝试计算连续 4 个单独列中的不同条目 然后对结果求和 例如 表头看起来类似于 ID Col1 Col2 Col3 Col4 每列 保存 ID 可以有一个文本值 W X Y 或 Z 列可以有相同的值 我想做的是找出一种方法来计算列中的
  • Java OS X Lion 关于菜单

    我正在尝试覆盖 OS X Lion 上的 Java 应用程序或 Leopard 及以上版本中的任何内容中的 关于 菜单 我怎么做 到目前为止 我读过的教程似乎不是最新的 一些类不再在 Java Mac SDK 中 其他类的事件也没有被触发
  • numpy 中 Float16 比 Float32 和 Float64 慢得多[重复]

    这个问题在这里已经有答案了 我试图运行一个代码片段 看起来像 import numpy as np import time def estimate mutual info X neurons bins 5 xy np histogram2
  • 将json文件插入mongodb

    我是 MongoDB 新手 在 Windows 中安装 MongoDB 后 我尝试使用以下命令插入一个简单的 json 文件 C gt mongodb bin mongoimport db test collection docs lt e
  • 如何将 Windows 窗体控件设置为只读?

    时隔很长一段时间回到VS2008中的WinForms 修补VS2008 Express版中的一个OOD问题 我需要一些控件作为 仅显示 小部件 用户不应该能够更改这些控件的值 小部件通过定期更新刻度事件进行更新 我依稀记得有一个 ReadO
  • 通过列表搜索

    我一直在尝试定义一个函数 给定一个整数列表和一个整数 n 返回一个布尔值 指示 n 是否在列表中恰好出现一次 我有这个 但它不起作用 我无法弄清楚 once a gt a gt Bool gt Bool filter filter p x
  • 如何填充剩余高度的100%?

    1 2
  • 列出 git 标签名称、日期和消息

    如何列出所有标签的标签名称 标签日期和标签消息 看来 git 通过以下方式分离了提交的显示逻辑git log并通过标签git tag使得列出标签名称 标签日期和标签消息变得困难 我可以显示标签日期 姓名和提交消息 using git log
  • bcrypt 中的盐的要点

    抱歉 如果这是一个愚蠢的问题 我只是想知道 bcrypt 中的盐有什么意义 我的意思是 如果您有以下用于从密码创建哈希的代码 function generateSalt salt 2a 13 salt salt 11111111111111
  • iOS 在应用程序内注册推送通知

    Q1 我必须在应用程序启动时执行此操作吗 或者我可以在应用程序中的任何时候触发允许 不允许的提示吗 Q2 有没有办法查明用户是否单击了是 否 打回来 Q3 如果用户已经单击 否 在之前的会话中 我的提示实际上会触发吗 或者我是否需要告诉用户
  • “sed” 在文件中插入反斜杠

    Tool Windows 版 Git Bash Problem 尝试在目录中每个文件的顶部插入文本 connectcentral Code for f in DIR sql do sed i 1i connect central f don
  • iPhone:跳转到uitableview中的下一个uitextfield,如何?

    在我的 iPhone 项目中 我使用 UITableview 和包含 UITextfields 的 UITableViewCells 我在许多应用程序中看到 可以使用下一个按钮跳转到下一个单元格中的下一个文本字段 实现这一目标的最佳方法是什
  • 诊断 Mac OS X 上的堆碎片?

    我正在编写的核心基础应用程序似乎消耗的内存比我实际分配的内存多 根据活动监视器中的 真实内存 计数 我已通过 Instruments 中的 实时字节分配 视图确认我的实际分配符合我的预期 大约 10MB 但活动监视器中的 真实内存 计数显示
  • 轻松安全AppiumService

    我是 Appium 新手 我想使用 Appium 和 C 执行一些 ADB 命令 执行 adb shell ps 的示例 Dictionary
  • 如何延迟forkJoin

    你会怎样拖延 forkJoin 在 rxjs 中 这是我已经拥有但想使用的delay https www learnrxjs io operators utility delay html运营商用那个 return forkJoin thi
  • iOS 内存警告发送到已释放的 UIViewController

    我有奇怪的行为 我的应用程序正在启动UINavigationController 如果我推视图控制器ANavigationController 返回并模拟内存警告一切正常 如果我推相同的视图控制器 ANavigationController
  • 浮点数的最佳中点公式是什么?

    第一个公式 m a b 2 简单 但是存在很大的溢出风险 除了 数值分析 第 9 版伯登和费尔斯指出 当 b a 接近机器的最大精度时 a b 2 有可能返回一个在区间 a b 中不均匀的中点 尽管没有提供进一步的解释 第二个 m a b
  • 如何通过 Angular 6 中的服务将对象发送到不相关的组件?

    所以我是 Angular 的新手 我正在尝试使用服务将对象从组件 1 发送到组件 2 当我将结果记录到 component2 中的控制台时 它没有给我对象的更新值 这可能是因为服务在第二个组件中重新初始化 你能帮忙解决这个问题吗 这是我的代
  • 为什么“(def 元音?(set“aeiou”))”有效?

    我正在看优秀的 Clojure 教程here http ociweb com jnb jnbMar2009 html 在其中一个示例中 它具有如下所示的 Clojure 代码 def vowel set aeiou 这使得元音对于元音返回