3
我想知道haskell如何忽略以下表達式。Haskell - span elem:評估
span (`elem` ['A'..'Z']) "BOBsidneyMORGANeddy"
結果是
("BOB","sidneyMORGANeddy")
任何人都可以解釋我的評估過程?因爲我不能說出它爲什麼像上面那樣分裂。
我想知道haskell如何忽略以下表達式。Haskell - span elem:評估
span (`elem` ['A'..'Z']) "BOBsidneyMORGANeddy"
結果是
("BOB","sidneyMORGANeddy")
任何人都可以解釋我的評估過程?因爲我不能說出它爲什麼像上面那樣分裂。
span
將使用謂詞將列表分成兩部分,第一部分是給定謂詞成立的最長前綴,第二部分是列表的其餘部分。換言之,第一部分與takeWhile
一樣獲得,第二部分與dropWhile
一樣獲得相同的謂詞。
現在讓我們來看看謂詞。 elem :: a->[a]->Bool
指示給定元素是否在給定列表中找到。整潔的訣竅是,兩個或多個參數的任何功能,可以在中間符號可以使用:
x `elem` xs
相同elem x xs
。因此,
`elem` xs
被視爲與中綴函數的部分一樣。它與\x -> elem x xs
相同。
您現在可以看到,span
被給予謂詞測試,以確定是否可以在列表['A'..'Z']
中找到要拆分的列表元素。所以它會將列表分成兩部分:它找到謂詞不包含的第一個元素,這就是分割點。這是第二個分區如何以第一個小寫字母開頭的方式。
它在's'處被分割,因爲這是第一個字母,它不是集合'A'。'Z''中的_not_。 – MathematicalOrchid 2014-10-20 11:31:35