LISP clause for and clause let ¿why?, making a programming language in racket using ragg
LISP clause for and clause let ¿why?,making a programming language in racket using ragg
我一直在试图找出错误,我正在做一种编程语言并有下一个代码,使用 ragg,我有一个 syntax-object(resto ...) 有一个括号作为数据,我将此语法对象转换为数据:
(let ([i (syntax->datum #'(resto ...))])
(display "Content i:")
(display i)
(if (eq? i (string->symbol "(})"))
(display "true")
(display "false")
)
)
输出为:
Content: (})
false
但是如果我这样做
(for ([i (syntax->datum #'(resto ...))])
(displayln "Content:")
(displayln i)
(if (eq? i (string->symbol "}"))
(display "true")
(display "false")
)
)
输出为:
Content: }
true
我的问题:
为什么 IF 子句 LET 是假的?
¿因为我可以比较这两种类型并且没有 FOR 结果是正确的?
关于函数的文档:
每段代码都在做完全不同的事情,我将向您展示如何让每段代码发挥作用。第一个使用 let
将 syntax->datum
返回的整个列表分配给变量,然后将其与另一个列表进行比较(最好使用 equal?
来测试相等性,它更通用):
(let ([i (syntax->datum #'(|}|))]) ; `i` contains `(})`
(display "Content i: ")
(displayln i)
(if (equal? i '(|}|)) ; a list with a single element, the symbol `}`
(displayln "true")
(displayln "false")))
第二段代码使用 for
遍历列表中的每个元素,直到找到符号 }
:
(for ([i (syntax->datum #'(|}|))]) ; `i` contains `}`
(display "Content i: ")
(displayln i)
(if (equal? i '|}|) ; the symbol `}`
(displayln "true")
(displayln "false")))
附带说明一下,您必须非常小心地处理所有这些花括号 {}
在您的语言中,它们被解释为普通括号 ()
在 Racket 中,它们很难处理,请注意我是如何通过用竖线围绕它们来逃避它们的。
我一直在试图找出错误,我正在做一种编程语言并有下一个代码,使用 ragg,我有一个 syntax-object(resto ...) 有一个括号作为数据,我将此语法对象转换为数据:
(let ([i (syntax->datum #'(resto ...))])
(display "Content i:")
(display i)
(if (eq? i (string->symbol "(})"))
(display "true")
(display "false")
)
)
输出为:
Content: (})
false
但是如果我这样做
(for ([i (syntax->datum #'(resto ...))])
(displayln "Content:")
(displayln i)
(if (eq? i (string->symbol "}"))
(display "true")
(display "false")
)
)
输出为:
Content: }
true
我的问题: 为什么 IF 子句 LET 是假的? ¿因为我可以比较这两种类型并且没有 FOR 结果是正确的?
关于函数的文档:
每段代码都在做完全不同的事情,我将向您展示如何让每段代码发挥作用。第一个使用 let
将 syntax->datum
返回的整个列表分配给变量,然后将其与另一个列表进行比较(最好使用 equal?
来测试相等性,它更通用):
(let ([i (syntax->datum #'(|}|))]) ; `i` contains `(})`
(display "Content i: ")
(displayln i)
(if (equal? i '(|}|)) ; a list with a single element, the symbol `}`
(displayln "true")
(displayln "false")))
第二段代码使用 for
遍历列表中的每个元素,直到找到符号 }
:
(for ([i (syntax->datum #'(|}|))]) ; `i` contains `}`
(display "Content i: ")
(displayln i)
(if (equal? i '|}|) ; the symbol `}`
(displayln "true")
(displayln "false")))
附带说明一下,您必须非常小心地处理所有这些花括号 {}
在您的语言中,它们被解释为普通括号 ()
在 Racket 中,它们很难处理,请注意我是如何通过用竖线围绕它们来逃避它们的。