2010-03-30 55 views
0

Haskell in 5 steps阶乘函数的定义如下:为什么命名函数必须在拥抱的独立文件中?

let fac n = if n == 0 then 1 else n * fac (n-1) 

但拥抱,它说,FAC需要在fac.h.任何人都可以解释为什么会出现这种情况 - 缺少定义命名函数的能力似乎是解释器的一个重大限制吗?

+3

仅供参考,GHCi可以定义函数。这几天我没有看到很多理由使用Hugs。 – Chuck 2010-03-30 15:26:37

回答

2

就我所知,基本答案是Hugs交互式顶层本质上是一个表达式解析器,而函数/数据定义不是表达式。如果您将其作为表达式并写入let fac n = if n == 0 then 1 else n * fac (n-1) in fac 19,那么您的示例实际上可行。为此添加支持将是一项非常大的工作,显然Hugs的实现者认为,要求函数/数据定义在文件中足够好。

2

拥抱错过了定义任何命名函数(递归与否)的能力。它也错过了定义数据类型的能力。

+3

这就是说它有限制,不是为什么限制存在。 – 2010-03-30 10:34:56

+1

感谢您的澄清,但我仍然好奇他们为什么决定不提供此功能。 – Casebash 2010-03-30 12:02:21

相关问题