- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
为什么这是有效的:
(= '(:anything :goes :here) (filter (fn [x] true) '(:anything :goes :here)))
但不是这个?
(= (:anything :goes :here) (filter (fn [x] true) '(:anything :goes :here)))
或
(= (:anything :goes :here) (filter (fn [x] true) (:anything :goes :here)))
甚至
(= '(:anything :goes :here) (filter (fn [x] true) (:anything :goes :here)))
要过滤的第二个参数是引用列表而不是普通列表是否有特殊原因?
user=> (filter (fn [x] true) (:abc :def :ghi))
IllegalArgumentException Don't know how to create ISeq from: clojure.lang.Keyword clojure.lang.RT.seqFrom (RT.java:505)
事实上,我仍然不确定什么时候列表也是函数调用。这似乎与引用有关。是否所有“普通列表”都需要引用,除非它们是空列表?
最佳答案
评估列表时,第一个元素被假定为函数(或宏或特殊形式)。
当列表的第一个元素是函数时,首先计算所有参数,然后将函数应用于结果值。
如果列表的第一个元素是宏或特殊形式,则每个参数可能会或可能不会被评估,具体取决于宏/特殊形式。
Clojure 将评估第一个元素为关键字的列表,方法是尝试在作为关键字函数参数的映射中找到该关键字作为键,然后返回相应的值,否则返回下一个参数(如果给定)。因此 (:anything :goes: :here)
将返回 here
。
'
是一个读取宏,它将其参数放入 quote
特殊形式。 即 'anything
=>(引用任何内容)
在你的情况下:
当 =
被评估时,(:anything :goes: here)
和/或 '(:anything goes here)
的值必须进行评估。对第一个的评估将导致 :here
。 (在其他 lisp 中,它会导致错误)。 '(:anything :goes :here)
,不过是 (quote (:anything :goes :here))
和 quote
是一种特殊形式,返回它的参数未计算,生成列表 (:anything :goes: here)
然后传递给 =
或 filter
而无需进一步评估。
然后在每种情况下发生的事情是:
(= '(:anything :goes :here) (filter (fn [x] true) '(:anything :goes :here)))
=
正在将 (:anything :goes :here)
与 (:anything :goes :here)
进行比较,结果为 true
(= (:anything :goes :here) (filter (fn [x] true) '(:anything :goes :here)))
:here
与 (:anything :goes :here)
比较,结果为 false
(= (:anything :goes :here) (filter (fn [x] true) (:anything :goes :here)))
(= '(:anything :goes :here) (filter (fn [x] true) (:anything :goes :here)))
在这两个中,filter
应用于单个关键字 :here
,导致错误。
关于Clojure Koan 第 8 节,#5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15848855/
我在通过 Greg Malcolm 的 Python Koans 的单例元组测试之一“test_tuples_of_one_look_peculiar”时遇到困难 ( https://github.c
我无法理解 Javascript koans 中的数组引用部分: it("should know array references", function () { var array = [ "z
我想把这两行代码合二为一。 for n in exceptions: my_dict[n] += 1 令我困扰的是,一个用于递增字典的小语句需要两行。我相信这个问题也困扰着某些人。 最佳答案
我正在浏览 Ruby Koans,我在 about_proxy_object_project.rb 中遇到了麻烦这是我的解决方案 class Proxy attr_reader :messages
我试图从 Ruby Koans 中理解一些东西。在一节课中,我们制作两个类如下: class CanNotBeTreatedAsString def to_s "non-string-li
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: obj.nil? vs. obj == nil 现在通过 ruby koans 工作,发现这个评论嵌入在
我正在研究 Ruby Koans,我在弄清楚我编写的方法出了什么问题时遇到了一些麻烦。我在about_scoring_project.rb中,写了骰子游戏的计分方法: def score(dice)
我有机会在 StackOverflow 中四处看看,发现了我试图从 Ruby Koans (Ruby Koans: explicit scoping on a class definition par
谁有zip的链接? github 存储库似乎已关闭:https://github.com/neo/ruby_koans/blob/master/download/rubykoans.zip?raw=t
可能是一个业余爱好者的标志,我想知道问题是不是公案(而不是我),但是,考虑一下这个公案 def test_calling_global_methods_without_parentheses
我正在通过 Clojure Koans 工作,我正在处理递归 koans。 不明白怎么解决is-even?使用递归。练习部分地将此功能定义为: (defn is-even? [n] (if (
我正在学习 clojure 并通过 clojure-koan练习。其中一个练习是关于implementing a factorial function .在玩的过程中,我发现: 我的递归实现似乎适用于
我正在研究 clojure koans,函数中的一个问题需要进一步解释,以便我“明白”并有一个顿悟时刻。我能够编写满足问题的函数。但我不完全理解为什么所有这些都有效。 Clojure> (= 25 (
在研究Kotlin Koans in IDEA时,我摆弄了一下,我想调试我的代码。 如何在调试器下运行koan任务? 失败了,我至少在哪里可以看到我的代码中println的输出? 最佳答案 您可以创建
这几天通过做Python Koans来学习Python,遇到了Python中引发异常的问题。具体来说,在看完公案之后,我什至对 try... except... 感到困惑。我知道鲁迪·科恩 (Rudy
我一直在研究 Ruby Koans,但我已经到了我不太了解的部分。具体来说,就是about_dice_project,他们要求我们定义一个类来通过几个预先设定的测试。本来,我的类(class)看起来像
这个问题可能很愚蠢/n00bish/不合适/本地化/闪闪发光的蛋糕,所以只要我得到答案,你就可以投反对票,因为我非常希望能够通过 koans。 :) 我正在尝试获取 this上类。 (GitHub 是
我在 Ruby Koans 中遇到以下错误: AboutHashes#test_accessing_hashes_with_fetch 破坏了你的业力。 大师说: 你还没有达到开悟。 我感到沮丧。不要
你能帮我重构我为 Ruby Koans #182 提出的解决方案吗?这是您在其中编写得分方法来计算贪婪游戏分数的公案。以下代码有效,所有测试均通过。 但是,它感觉又长又不像 ruby 。我怎样才能让它
我是一名优秀的程序员,十分优秀!