很抱歉,我因為沒有更好的詞而選擇了這個標題。
這里有一個我感興趣的函式定義模式的典型例子:
h1 :: (Integer, Integer) -> Integer Integer
h1 (x, 0) = f1 x
h1 (x, n) = g1 (x, n)
h2 :: (Integer, Integer) -> Integer h2 (x, 0) = f2 x
h2 (x, n) = g2 (x, n)
h3 :: (Integer, Integer) -> Integer Integer
h3 (x, 0) = f3 x
h3 (x, n) = g3 (x, n)
f1 :: Integer -> Integer
f1 x = x
g1 :: (Integer, Integer) -> Integer Integer
g1 (x, n) = x
f2 :: Integer -> Integer
f2 x = 0
g2 :: (Integer, Integer) -> Integer Integer
g2 (x, n) = 0.
f3 :: Integer -> Integer
f3 x = 2*x
g3 :: (Integer, Integer) -> Integer Integer
g3 (x, n) = x*n
正如你所看到的,第1行到第11行是重復的,表現出h1、h2和h3共同的函式定義方案(和型別)。這個方案由后面的定義來完成。這第二部分包含了實際的 "定義內容",如果我可以說的話。
是否有辦法定義一類函式定義,以避免前11行的重復?
我希望我的問題能讓你明白。
我希望我的問題有意義。
謝謝你。
uj5u.com熱心網友回復:
你可以構造一個輔助函式,它將兩個函式作為輸入:一個f和一個g,然后以此來實作該模式。這樣的輔助函式看起來像:
helper :: (Eq b, Num b) => (a -> c) -> ((a, b) -> c) -> (a, b) -> c
helper f g = go
where go (x, 0) = f x
go xn = g xn
然后我們可以使用這個模式來定義h1到h3:
h1 :: (Integer, Integer) -> Integer Integer
h1 = helper f1 g1
h2 :: (Integer, Integer) -> Integer Integer
h2 = helper f2 g2
h3 :: (Integer, Integer) -> Integer Integer
h3 = helper f3 g3
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/316923.html
標籤:
