在Haskell in 5 steps中,阶乘函数定义如下:
let fac n = if n == 0 then 1 else n * fac (n-1)
但是对于拥抱,它说fac需要在fac.h.任何人都可以解释为什么会这样 - 缺少定义命名函数的能力似乎是解释器的一个巨大限制?
答案 0 :(得分:2)
Hugs错过了定义任何命名函数的能力(递归与否)。它也错过了定义数据类型的能力。
答案 1 :(得分:2)
据我所知,基本答案是Hugs交互式toplevel本质上是一个表达式解析器,而函数/数据定义不是表达式。如果您将其作为表达式并编写let fac n = if n == 0 then 1 else n * fac (n-1) in fac 19
,那么您的示例实际上会起作用。添加对此的支持将是一项相当大的工作,显然Hugs实现者认为要求函数/数据定义在文件中是足够好的。