2013-05-27 48 views

回答

13

這樣的簽名函數將是[(a, b)] -> a -> b。這聽起來像一個普通的操作,所以let's search on Hoogle看看它是否已經存在。哦,它幾乎和它被稱爲lookup

lookup :: Eq a => a -> [(a, b)] -> Maybe b 

lookup key assocs查找在關聯列表中的關鍵。

我們需要做的是翻轉前兩個參數(使用flip)和剝離Maybe不在結果(用fromJust組成)。結果:

g :: Int -> Char 
g = fromJust . flip lookup [(1,'a'),(2,'b'),(3,'c')] 
+0

哦,沒有想到它是一個查找問題哈哈。什麼是任意長度的元組,其中第一個(n-1)元素是映射到最後一個元素的參數,如g :: Int - > Int - > Char – chibro2

+6

@ chibro2:將表格更改爲'[ (arg1,arg2,...),value)]''。那麼你仍然可以使用'lookup'。 – hammar

+9

另外,使用'fromMaybe(錯誤「msg」)''而不是'fromJust',這是個好主意。這樣,如果最終在未定義函數的地方調用函數,就很容易找到該錯誤。 – hammar

相關問題