【问题标题】:in Scheme, is there syntactical sugar for an ordinary, unquoted list?在 Scheme 中,普通的、未引用的列表是否有语法糖?
【发布时间】:2016-05-25 11:26:58
【问题描述】:

在 Scheme 中,如果我想要一个列表,比如 (1 2 3),我会写 '(1 2 3)。通常,这很好,但它实际上等同于(quote (1 2 3)),与(list 1 2 3) 并不完全相同。何时会产生不同结果的示例:

'(1 2 (+ 0 3)) -> (1 2 (+ 0 3))
(list 1 2 (+ 0 3)) -> (1 2 3)

这里有第二行的语法糖吗?对于向量,有。例如:

#(1 2 (+ 0 3)) -> #(1 2 3)
(vector 1 2 (+ 0 3)) -> #(1 2 3)

如果列表没有这样的糖,那将是相当讽刺的,因为在 Scheme 中列表比向量更常用!

【问题讨论】:

  • 在 Racket(我的解释器)中,#(1 2 (+ 0 3)) 的计算结果为 '#(1 2 (+ 0 3))
  • 查看这个问题:What is the difference between quote and list? 及其接受的答案。
  • @ÓscarLópez 在 Guile 和 Chicken 中也是如此:向量的文字语法不会评估内部的形式。

标签: scheme lisp syntactic-sugar


【解决方案1】:

如果您需要评估列表的一部分,可以使用quasiquoting and unquoting,如下所示:

`(1 2 ,(+ 0 3))
=> '(1 2 3)

【讨论】:

    猜你喜欢
    • 2021-05-05
    • 2023-03-29
    • 2014-03-23
    • 2022-07-07
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 2010-09-22
    • 2011-12-23
    相关资源
    最近更新 更多