Haskell 为什么命名函数必须在hugs中的单独文件中?

Haskell 为什么命名函数必须在hugs中的单独文件中?,haskell,hugs,Haskell,Hugs,阶乘函数的定义如下: let fac n = if n == 0 then 1 else n * fac (n-1) 但对于拥抱,它说fac需要在fac.h。有人能解释为什么会出现这种情况吗?对于解释器来说,缺少定义命名函数的能力似乎是一个巨大的限制?Hugs缺少定义任何命名函数的能力(递归或非递归)。它还失去了定义数据类型的能力。Hugs失去了定义任何命名函数(递归或非递归)的能力。它还缺少定义数据类型的功能。据我所知,基本答案是Hugs interactive toplevel本质上是一个

阶乘函数的定义如下:

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

但对于拥抱,它说fac需要在fac.h。有人能解释为什么会出现这种情况吗?对于解释器来说,缺少定义命名函数的能力似乎是一个巨大的限制?

Hugs缺少定义任何命名函数的能力(递归或非递归)。它还失去了定义数据类型的能力。

Hugs失去了定义任何命名函数(递归或非递归)的能力。它还缺少定义数据类型的功能。

据我所知,基本答案是Hugs interactive toplevel本质上是一个表达式解析器,而函数/数据定义不是表达式。如果您将其设置为表达式并在FAC19中编写
让fac n=if n==0,那么1 else n*fac(n-1),那么您的示例实际上是可行的。添加对这方面的支持将是一项相当大的工作,显然,Hugs实现者认为要求函数/数据定义在文件中就足够了。

据我所知,基本答案是Hugs interactive toplevel本质上是一个表达式解析器,而函数/数据定义不是表达式。如果您将其设置为表达式并在FAC19中编写
让fac n=if n==0,那么1 else n*fac(n-1),那么您的示例实际上是可行的。添加对此的支持将是一项相当大的工作,显然,Hugs的实现者认为要求函数/数据定义在文件中已经足够好了。

这说明它有局限性,而不是局限性存在的原因。感谢您的澄清,但我仍然好奇为什么他们决定不提供此功能。这说明它有限制,而不是限制存在的原因。感谢澄清,但我仍然好奇为什么他们决定不提供此功能。仅供参考,GHCi可以定义函数。我觉得现在没有太多理由使用拥抱。仅供参考,GHCi可以定义函数。我觉得这些天没有太多理由拥抱。