问题标签 [repl-printed-representation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scheme - Scheme 和 Racket 中嵌套引号的行为
在 Racket 中编写函数时,我不小心在符号前面放了两个单引号,而不是一个。即我不小心写了''a 并发现了一些看起来很奇怪的嵌套引号行为。我正在使用 DrRacket 并使用 Racket lang 和 R5RS lang 对此进行了测试。
打印:#t。
印刷品:报价
但
和
两者都打印:'a
有人能告诉我为什么在 Scheme(和 Racket)中使用函数对吗?将 (quote (quote a))) 解释为一对两个元素 quote 和 a ,但函数 write 打印出 'a 而不是 (quote a) 。
scheme - 球拍中报价的行为
我习惯于(quote x)
评估 to x
、(quote (x y z))
评估 to(x y z)
和(car (quote (x y z))
评估 to x
。推理很简单:quote 是一种特殊形式,它不评估其参数,而只是按原样返回它。
我刚开始使用 Racket,它认为(quote x)
评估为(quote x)
,(quote (x y z))
评估为(quote (x y z))
,(car (quote (x y z))
评估为(quote x)
。
好吧,实际上,它分别将这些打印为'x
、'(x y z)
和'x
,但这是同一回事。
有人可以在这里解释原因吗?如果由于某种原因(quote (x y z))
评估为(quote (x y z))
,那么那辆车不应该是quote
吗?从哪里来(quote x)
?
据我所知,在整个计算过程中,Racket 的内部行为与我习惯的一样,只是在打印最终结果时,它会将其包装在报价形式中。这在所有情况下都正确吗?如果是这样,它为什么要这样做?
functional-programming - 什么是球拍中的'(撇号)?
我对'
球拍标志的含义有点困惑。在我看来,同一个符号有不同的含义。看下面两个简单的例子:
返回一个新分配的列表,其中包含 vs 作为其元素。
产生一个对应于数据(即程序片段的表示)的常量值,没有它的词法信息、源位置等。引用的对、向量和框是不可变的。
所以我的问题是:'
符号是否有 2 个含义(符号和列表)或者它们是相同的数据类型并且list
实际上返回一个带引号的常量值?如果是第二种情况,为什么这样做:
(也(eval '(+ (- 2 13) 11))
适用并正确评估为0
)
但这不会:
可能相关: Lisp / Scheme中的'(撇号)是什么?
racket - 为什么我的函数返回的列表结果看起来很有趣?
我正在使用此代码,但它不会按照我想要的方式创建列表。(evenList (list 1 2 3 4))
在 REPL 中计算为(cons 2 (cons 4 '()))
,但我希望它像(list 2 4)
.
lisp - 在 lisp 中计算出现次数
我正在尝试在 lisp 中编写代码来计算 lisp 列表中原子的出现次数。问题是代码适用于除 atom 之外的所有原子()
,它显示为NIL
. 代码中的示例:
关于如何展示()
而不是展示的任何想法NIL
?
scheme - 可以使用 cons 来做 ((a . b) . (c . d)) 吗?如果不是,任何其他方式或点对不能有这样的第二个元素?
;;; 如果没有任何其他方式或点对不能有这样的第二个元素?