[英]Program Flow in some Haskell Code
我有一個haskell函數,以某種方式與中綴運算符有關。
(<+) :: Hand -> Hand -> Hand
Empty <+ hand = hand
hand <+ Empty = hand
(Add card hand1) <+ h2 = Add card (hand1 <+ h2)
函數簽名后的前兩行很容易理解,但是最后一行讓我很難理解它的流程
該功能的目的是創建一個運算符,當給定兩只手時,它將一只手加到另一只手上。 所謂“手”,是指卡的集合。
卡和手牌類型的定義如下
data Card = Card { rank :: Rank, suit :: Suit } deriving (Eq, Show)
data Hand = Empty | Add Card Hand deriving (Eq, Show)
最后一個是通常的遞歸情況:
如果你的左手由一個卡的card
再加上一些尾單手 hand1
那么你可以連接你的右手 h2
加入(命名似乎很奇怪) card
在你得到什么,當你您連接前hand1
和h2
(recursivley) -這是正好hand1 <+ h2
重要的是, 左手變得更小,因此遞歸終於可以停止-您只需按下(<+)
在那里更深(拉動Add
了),直到你到了一個Empty
-cases。
也許一個例子會有所幫助:
(Add l1 (Add l2 Empty)) <+ (Add r1 Empty)
{ last case }
= Add l1 ((Add l2 Empty) <+ (Add r1 Empyt))
{ last case for the inner part }
= Add l1 (Add l2 (Empty <+ (Add r1 Empty)))
{ first case inner }
= Add l1 (Add l2 (Add r1 Empty))
只是有l1,l2,r1
一只手(或者我猜是這樣)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.