簡體   English   中英

一些Haskell代碼中的程序流

[英]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在你得到什么,當你您連接hand1h2 (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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM