2010-03-30 43 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

相關問題