基本上,该语言有 3 种列表和 3 种固定长度类型,其中之一是字符串。使用正则表达式检测标记的类型很简单,但是将它们拆分为标记并不是那么简单。
字符串用双引号表示,双引号用反斜杠转义。
编辑:
一些示例代码
{
print (sum (1 2 3 4))
if [( 2 + 3 ) < 6] : {print ("Smaller")}
}
像这样的列表
- () 是仅在必要时评估的参数列表。
- [] 是用更漂亮的方式表达 2 个操作数操作的特殊列表。
- {} 是始终被评估的列表。第一个元素是函数名,第二个是参数列表,如此重复。
- 任何东西 : 任何东西 [ : 任何东西 [: ...]] 转换为参数列表,其中包含由 :s 连接的元素。这只是为了使循环和条件看起来更好。
所有函数都接受一个参数。参数列表可用于需要更多功能的函数。您可以使用不同类型的 eval 函数来评估前和参数列表。(每个列表模型都有 eval 函数)
所以,如果你理解这一点,它的工作原理和 Lisp 非常相似,只是有不同的列表类型来美化代码。
编辑:@rici
[[2 + 3] < 6]
也可以。正如我所提到的,仅在必要时才评估参数列表。由于<
is 是一个需要长度为 2 的参数列表的函数,(2 + 3)
因此必须以某种方式对其进行评估,它[(2 + 3) < 6]
会以其他方式转换为< (2 + 3) : 6
which equals to < (2 + 3 6)
which is 和无效的参数列表<
。但是我明白你的意思,在这种情况下自动解析应该如何工作并不是一件容易的事。我上面描述的版本是[...]
使用类似的函数评估参数列表eval_as_oplist (...)
但我想你是对的,因为这样,你不能在 a 中以常规方式使用参数列表,[...]
即使你不这样做也是有问题的没有理由这样做,因为它不会导致更好的代码。[[. . .] . .]
我同意,更好的代码也是如此。