我是一个相当基本的 Go 程序员,我一直在研究这个小型 Scheme 解释器,我一直试图了解它是如何工作的。
我在这里找到它:https : //pkelchte.wordpress.com/2013/12/31/scm-go/
我阅读了网页,但我仍在努力理解它是如何工作的,因为源代码显然是由比我更熟悉 Go 的人编写的。
特别是我很难理解这些行:
e := expression.(type) // Line 73
我不确定这.(type)部分是什么意思,我以为它是铸造的,但它看起来不像我以前见过的铸造。
switch p := procedure.(type) {
case func(...scmer) scmer:
value = p(args...)
case proc:
en := &env{make(vars), p.en}
switch params := p.params.(type) {
case []scmer:
for i, param := range params {
en.vars[param.(symbol)] = args[i]
}
default:
en.vars[params.(symbol)] = args
}
value = eval(p.body, en)
老实说,我真的不明白这些代码中的任何一个。第 73 - 86 行
*tokens = (*tokens)[1:] // Line 208
我不确定这一行是什么意思,因为它的语法很奇怪。我知道它的指针和括号是因为 *. 但我不确定那条线在做什么。
最后有这些行:
token := (*tokens)[0]
*tokens = (*tokens)[1:]
switch token {
case "(": //a list begins
L := make([]scmer, 0)
for (*tokens)[0] != ")" {
if i := readFrom(tokens); i != symbol("") {
L = append(L, i)
}
}
*tokens = (*tokens)[1:]
return L
我也不知道这些线是做什么的。第 198 - 209 行
这是完整的代码,如果你想要的话,我知道它有 250 行长,但我真的很感激尽可能多地解释它的作用。
收到一只叮咚
HUWWW
相关分类