标签: quote

生成宏形式的宏包含在绑定变量中

我一直在尝试编写一个宏,除其他外,生成一个同名的编译器宏.这是我坚持的最小代码:

 (defmacro definline (name lambda-list &body body)
  `(define-compiler-macro ,name ,lambda-list
     `(let ,,(mapcar (lambda (v) ``(,',v ,,v)) lambda-list)
        ,,@body)))
Run Code Online (Sandbox Code Playgroud)

我想要的是这样的:

(definline foobar (a b) (print "foobar") (+ a b))
;; Expands to
(define-compiler-macro foobar (a b)
  `(let ((a ,a) (b ,b))
     (print "foobar") (+ a b)))
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何生成let绑定((a ,a) (b ,b)).我无法解决的问题是如何生成编译器宏表单,以便在扩展中不引用 lambda绑定的内容.我理解如何手动执行此操作,但我不确定如何对任意lambda列表执行此操作.

编辑:

经过一些更多的摆弄,我想出了这个.哪个有效.但是,它很可怕.

(defmacro definline (name lambda-list &body body)
  (read-from-string
   (format nil "(define-compiler-macro ~S (~{~S~^ ~})
                    `(let (~{(~S ,~S)~})
                       ~{~S~}))"
           name lambda-list (loop for l in lambda-list nconc …
Run Code Online (Sandbox Code Playgroud)

lisp macros common-lisp quote

6
推荐指数
1
解决办法
154
查看次数

是否可以在格式不正确的JSON字符串中检测错误的引号,然后将字符串解析为JSON?

我正在使用Rails 4.2.3.我正在解析第三方发送的JSON(我无法控制这个JSON是如何形成的).我注意到他们偶尔会发送不好的JSON,就像这样

    '{"DisplayName":""fat" Tony Elvis ","Time":null,"OverallRank":19,"AgeRank":4}'
Run Code Online (Sandbox Code Playgroud)

请注意,在上面,带有引号的"fat"这个词搞砸了JSON的其余部分.在我的Rails代码中,我解析了JSON,就像这样......

    json_data = JSON.parse(content_str)
Run Code Online (Sandbox Code Playgroud)

虽然我可以在JSON无法正确解析时捕获错误,但我想知道是否有办法解释这些布置不当的引号,更正它们以便上面的字符串不构成错误的JSON,然后正确解析JSON.

parsing json quote ruby-on-rails-4

6
推荐指数
1
解决办法
276
查看次数

有什么作用!!R 中的运算符均值

有人可以解释一下,我们需要什么!!!!!或者{{}}需要什么操作员吗rlang?我试图了解更多有关准引用的知识,但没有得到任何结果。

我已经在 Stack 上找到了几篇关于 curly-curly 运算符的帖子,并且了解我们{{在将数据帧的变量(或对象的其他子对象)传递到函数中时使用它。但在阅读了有关引用/取消引用的内容后,我对所有这些运算符及其用法完全感到困惑。

为什么我们需要它,为什么有些函数没有它就无法读取参数,最后,它们实际上是如何工作的?

如果您以最简单的方式给出答案,即使我也能理解(也许有例子?),我将不胜感激。

r quote tidyverse rlang quasiquotes

6
推荐指数
1
解决办法
2715
查看次数

为什么(列出'quote'x)评估为'x而不是('x)或(引用'x)?

我正在尝试学习LISP,并且正在通过一个代码示例,其中使用类似于以下代码的代码:

(列表'引用5)

这在REPL中评估为'5.我期望它评估为('5)或(引用5)

我在CLISP REPL中尝试这个.

任何帮助,将不胜感激.

lisp evaluation clisp common-lisp quote

5
推荐指数
1
解决办法
285
查看次数

用于修改字符串外引号的 ruby​​ 代码?

有谁知道对字符串的外引号进行操作的 Ruby gem(或内置或本机语法,就此而言)?

我发现自己一遍又一遍地编写这样的方法:

remove_outer_quotes_if_quoted( myString, chars ) -> aString
add_outer_quotes_unless_quoted( myString, char ) -> aString
Run Code Online (Sandbox Code Playgroud)

第一个测试myString它的开始和结束字符是否与chars. 如果是,则返回去掉引号的字符串。否则它返回它不变。chars默认为引号字符列表。

第二个测试myString以查看它是否已经开始和结束char。如果是,则返回未更改的字符串。如果不是,它返回char前后附加的字符串,并且任何嵌入的出现char都用反斜杠转义。char默认为默认字符列表中的第一个。

(当然,我手工拼凑的方法没有如此冗长的名称。)

我在公共存储库中四处寻找类似的方法,但找不到类似的方法。我是唯一一个需要做很多事情的人吗?如果没有,其他人是如何做到这一点的?

ruby string quote

5
推荐指数
2
解决办法
3705
查看次数

任何人都可以给我一个Ada中"单引号"用法的摘要?

我刚读过"Ada Programming",但我对如何'在Ada中使用(单引号)感到困惑.

我可以理解,'它用于引用属性.AAA'Image(..),BBB'Value(..)

但是,考虑到这段代码:

   type Plain_Vector (Capacity : Capacity_Subtype) is record
      Elements : Elements_Array (1 .. Capacity);
      Last     : Extended_Index := No_Index;
      Busy     : Natural := 0;
      Lock     : Natural := 0;
   end record;
 ------------------------------------------------------------------
   new Plain_Vector'(2, (Left, Right), Last => Last, others => <>)
Run Code Online (Sandbox Code Playgroud)

Q1: "new"语句的参数如何与类型的参数和记录字段匹配?

 I can GUESS "2" matched "Capacity", 
             "(Left, Right)" matched "Elements", 
             "Last => Last" matched "Last"
             "Others => <>" matched "Busy" and "Lock" to let them use default …
Run Code Online (Sandbox Code Playgroud)

arguments record ada new-operator quote

5
推荐指数
2
解决办法
757
查看次数

功能指示符不受欢迎?

浏览 Common Lisp 源代码时,我注意到人们最常使用#'foowhere'foo就足够了——也就是说,无论在何处接受函数指示符,他们都会选择传递函数。

当然,#'foofoo通过flet等等定义时是必要的。我理解这一切的机制——我的问题是一种风格。难道只是因为人们不想考虑'foovs #'foo,所以他们使用后者是因为前者有时不起作用?即使是这样,它也不会解释使用,#'(lambda ...)因为#'在那里总是不必要的。

CL 有时被称为丑陋,因为#',并且大多数新手没有意识到在(我敢说)大多数情况下它是不必要的。我不是新人,但我碰巧更喜欢'foo. 为什么我不正常?如果我发布一些给funcalland符号的代码,apply我会被嘲笑和羞辱吗?我正在考虑在我的领域开始一个函数指示符匿名章节。我怀疑人们想要使用功能指示符,但由于同龄人的压力,他们害怕“出来”。

lisp common-lisp quote

5
推荐指数
2
解决办法
562
查看次数

谁说"数据结构是代码的一半"?

很久以前,我读过"数据结构是代码的一半"的引用,但是不记得我在哪里阅读它或者归结为谁.我感谢任何帮助.谢谢.

- jqr

quote data-structures

5
推荐指数
2
解决办法
2484
查看次数

如何为枚举实现 quote::ToTokens ?

我正在实现一个程序宏,我需要向外部提供我自己的结构。我需要quote::ToTokens为我的结构实现特征,但我不明白如何实现。我已经尝试过这段代码但没有成功。此代码可以编译,但无效:

#[derive(Debug, Serialize, Clone)]
pub enum Enum {
    A,
    B,
}
impl quote::ToTokens for Enum {
    fn to_tokens(&self, tokens: &mut quote::Tokens) {
        tokens.append("Enum::B");
    }
}
Run Code Online (Sandbox Code Playgroud)

quote::ToTokens示例没有解释这一点。

enums quote rust

5
推荐指数
1
解决办法
792
查看次数

带单引号的 ADF 数据流连接表达式

我需要使用 Azure 数据流表达式生成器生成 SQL 字符串,但它不允许我使用 Concat 函数在字符串之间添加单引号

我需要一个如下的 SQL 字符串

SELECT * FROM ABC WHERE myDate <= '2019-10-10'
Run Code Online (Sandbox Code Playgroud)

这里 2019-10-10 来自参数,所以我构建的表达式如下

concat('SELECT * FROM ABC WHERE myDate >=','''',$ToDate,'''')
Run Code Online (Sandbox Code Playgroud)

但上面的语句无法解析表达式。

结果将作为 SQL 查询执行。SQL 查询不允许使用双引号。它必须是单引号。

使用数据工厂表达式可以轻松实现这一点,但使用天蓝色数据流表达式则无法实现。

sql expression quote google-cloud-dataflow azure-data-factory

5
推荐指数
1
解决办法
2万
查看次数