我正在經歷Haskell O'Reilly書中的問題。我正在處理的問題是開始Haskell - 獲取「不在範圍內:數據構造函數」錯誤
Using the binary tree type that we defined earlier in this chapter,
write a function that will determine the height of the tree. The height
is the largest number of hops from the root to an Empty. For example, the
tree Empty has height zero; Node "x" Empty Empty has height one;
Node "x" Empty (Node "y" Empty Empty) has height two; and so on.
我在一個名爲ch3.hs的文件中編寫我的代碼。這裏是我的代碼:
36 data Tree a = Node a (Tree a) (Tree a)
37 | Empty
38 deriving (Show)
39
40 --problem 9:Determine the height of a tree
41 height :: Tree -> Int
42 height (Tree node left right) = if (left == Empty && right == Empty) then 0 else max (height left) (height right)
在終端打開ghci並鍵入:load ch3.hs.當我這樣做,我得到以下錯誤:
Prelude> :load ch3.hs
[1 of 1] Compiling Main (ch3.hs, interpreted)
ch3.hs:42:7: Not in scope: data constructor `Tree'
Failed, modules loaded: none.
我想到的是,樹的數據構造應該有,因爲我在高處方法行定義它。但是當我嘗試加載文件時,我被告知數據構造函數不在範圍內。感謝您的幫助,並解釋爲何發生此錯誤。謝謝, 凱文
謝謝,工作。我仍然不完全理解正在發生的事情,並且現在在運行時遇到錯誤,但會繼續盯着思考和調試。 – 2010-08-28 20:17:23
另一個例子可能會使它更容易理解。假設我們正在使用整數,而不是樹。 Int是整數類型的名稱。您不能添加「Int + Int」,因爲Int是類型的名稱,而不是返回該類型值的構造函數。像0,1,2這些東西是構造函數,如果你想使用整數,那就是你如何讓它們進入你的程序。把這個應用到你的案例中,'Tree'是類型的名稱,'Node'(或'Empty')是你如何獲得*這種類型的值。 – jrockway 2010-08-29 01:44:34
HaskellWiki也有一個有用的部分,它甚至使用Tree作爲示例:http://www.haskell.org/haskellwiki/Constructor – jrockway 2010-08-29 01:45:48