Haskell - 遍歷器



Haskell 中的遍歷器基本上是指向資料結構特定位置的指標,例如

我們來考慮一個包含 5 個元素 [45,7,55,120,56],它可以表示為一個完美的二叉樹。如果我想更新此列表的最後一個元素,那麼我需要遍歷所有元素才能在更新它之前到達最後一個元素。對嗎?

但是,如果我們能夠以這樣一種方式構建我們的樹,即包含N個元素的樹是一個[(N-1),N]的集合呢?那麼,我們就無需遍歷所有不需要的(N-1)元素。我們可以直接更新第 N 個元素。這正是遍歷器的概念。它關注或指向樹中的特定位置,我們可以在該位置更新該值,而無需遍歷整個樹。

在以下示例中,我們在一個列表中實現了遍歷器的概念。同樣的,也可以在檔案資料結構中實現遍歷器。

data List a = Empty | Cons a (List a) deriving (Show, Read, Eq, Ord)
type Zipper_List a = ([a],[a])    

go_Forward :: Zipper_List a -> Zipper_List a   
go_Forward (x:xs, bs) = (xs, x:bs)   
   
go_Back :: Zipper_List a -> Zipper_List a   
go_Back (xs, b:bs) = (b:xs, bs)    

main = do 
   let list_Ex = [1,2,3,4] 
   print(go_Forward (list_Ex,[]))       
   print(go_Back([4],[3,2,1])) 

當您編譯並執行上述程式時,將生成以下輸出 −

([2,3,4],[1]) 
([3,4],[2,1])

在前進或後退時,我們關注整個字串的一個元素。

廣告