在Haskell in 5 steps階乘函數的定義如下:爲什麼命名函數必須在擁抱的獨立文件中?
let fac n = if n == 0 then 1 else n * fac (n-1)
但擁抱,它說,FAC需要在fac.h.任何人都可以解釋爲什麼會出現這種情況 - 缺少定義命名函數的能力似乎是解釋器的一個重大限制嗎?
在Haskell in 5 steps階乘函數的定義如下:爲什麼命名函數必須在擁抱的獨立文件中?
let fac n = if n == 0 then 1 else n * fac (n-1)
但擁抱,它說,FAC需要在fac.h.任何人都可以解釋爲什麼會出現這種情況 - 缺少定義命名函數的能力似乎是解釋器的一個重大限制嗎?
就我所知,基本答案是Hugs交互式頂層本質上是一個表達式解析器,而函數/數據定義不是表達式。如果您將其作爲表達式並寫入let fac n = if n == 0 then 1 else n * fac (n-1) in fac 19
,那麼您的示例實際上可行。爲此添加支持將是一項非常大的工作,顯然Hugs的實現者認爲,要求函數/數據定義在文件中足夠好。
擁抱錯過了定義任何命名函數(遞歸與否)的能力。它也錯過了定義數據類型的能力。
這就是說它有限制,不是爲什麼限制存在。 – 2010-03-30 10:34:56
感謝您的澄清,但我仍然好奇他們爲什麼決定不提供此功能。 – Casebash 2010-03-30 12:02:21
僅供參考,GHCi可以定義函數。這幾天我沒有看到很多理由使用Hugs。 – Chuck 2010-03-30 15:26:37