4
我想元組的這個列表轉換:如何從元組列表中構建函數?
[(1,'a'),(2,'b') ... ]
成可以寫成這樣的功能:
g :: Int -> Char
g 1 = 'a'
g 2 = 'b'
.
.
.
使用案例:
g 1 -- | 'a'
我想元組的這個列表轉換:如何從元組列表中構建函數?
[(1,'a'),(2,'b') ... ]
成可以寫成這樣的功能:
g :: Int -> Char
g 1 = 'a'
g 2 = 'b'
.
.
.
使用案例:
g 1 -- | 'a'
這樣的簽名函數將是[(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')]
哦,沒有想到它是一個查找問題哈哈。什麼是任意長度的元組,其中第一個(n-1)元素是映射到最後一個元素的參數,如g :: Int - > Int - > Char – chibro2
@ chibro2:將表格更改爲'[ (arg1,arg2,...),value)]''。那麼你仍然可以使用'lookup'。 – hammar
另外,使用'fromMaybe(錯誤「msg」)''而不是'fromJust',這是個好主意。這樣,如果最終在未定義函數的地方調用函數,就很容易找到該錯誤。 – hammar