use*_*605 1 sml read-eval-print-loop
SML 中的编译时和运行时有什么区别?
写完一些 SML 代码后,我们按下 Enter 键。但我不明白,我们实际上是编译它还是运行它?例如
- fun len [] = 0 | len (x::xs) = 1 + len xs; /* hit enter*/
val len = fn : 'a list -> int
Run Code Online (Sandbox Code Playgroud)
按回车键后,我们得到val len = fn : 'a list -> int结果。这是运行时结果还是编译时结果?
我真的不明白幕后发生了什么。
在您的示例中,您似乎使用了解释器,那么编译时和运行时之间的差异可能不是那么明显。原则上是:
对于您的明确示例:在编译时,仅检查您的输入在语法上是否正确并len推断出类型。在运行时,执行由输入表示的程序,但由于该程序中没有计算(它只是定义新函数len而不调用它),因此无需执行任何操作。