myuan пре 3 година
родитељ
комит
9b1c6b5d6a
1 измењених фајлова са 12 додато и 1 уклоњено
  1. 12 1
      3. 简单的数值语言及其虚拟机/readme.md

+ 12 - 1
3. 简单的数值语言及其虚拟机/readme.md

@@ -62,6 +62,17 @@ output(sqrt(2), square(sqrt(2)))
 
 ## 即时解释式虚拟机
 
+第一个实现照例先做一个最朴素的, 就像第一节的四则运算器一样, 之后再用业界常用手段来做. 
+
+这样的一个虚拟机实现起来非常简单, 只需要记录当前已定义的函数, 就是全部的运行环境了, 函数调用时先看参数里有没有指定的函数, 然后找到就用, 找不到就再往上看, 都找不到就报错. 上面的语法里, 虽然有函数参数, 但是函数参数是不可变的, 也是无类型的, 因此这样的代码也并没有超出框架
+
+```
+add_one(x) = x + 1
+g(f, x) = f(f(x))
+add_two(x) = g(add_one, x)
+
+output(add_two(1))
+```
 
 ## 鸣谢
 
@@ -73,7 +84,7 @@ output(sqrt(2), square(sqrt(2)))
 
 上节写的「在JavaScript里实现的同样功能的解析器和虚拟机」先叉掉
 
-上面的语言非常函数式, 以及同样有对应的几乎一比一等价的 C++ 模板表示, 当然现在有更简化的 constexpr 了, 这种奇技淫巧能用的地方减少了很多, 以前用起来模板, 起手一个递归式2333. 
+上面的语言非常函数式, 以及同样有对应的几乎一比一等价的 C++ 模板表示, 当然现在有更简化的 constexpr 了, 这种奇技淫巧能用的地方减少了很多, 以前用起来模板, 起手一个递归式2333. 
 ## 下节预告
 
 - 基于栈或者基于寄存器的虚拟机