2016-12-30 112 views
2

大廈數據我有一個這樣的數據類型:喜歡各地的方案中使用與邏輯

data FooBar = 
    FooBar { foo :: Double 
     , bar :: Double 
     , ter :: Double 
     } 

-- hypothetical builder with some random logic 
mkFooBar :: Double -> Double -> FooBar 
mkFooBar a b 
    | a < 5  = FooBar a b (a + b) 
    | a > 100 = FooBar a b (a * b) 
    | otherwise = FooBar (a^2) (b^2) ((a + b) ^2) 

和某些特定值:

fBLess5 = mkFooBar 1 200 
fBMore100 = mkFooBar 200 200 
fBSquared = mkFooBar 50 200 
-- and so on 

是這樣說,這在Haskell確定建築物預定義的值?如果fBLess5在程序中使用了N次,如果以這種方式寫入,它將被構建N次?

回答

6

這將工作。通過將該值綁定到某個名稱上,無論您多久使用它,都要確保僅對其進行評估(至多)一次,然後進行共享。

(有一個例外,雖然:

foo :: (Num a) => a 
foo = 42 

這種明顯的常數是多態的,並會在每次使用(這是真的fromInteger (42 :: Integer))被重新計算,但並不適用於你的代碼,這是所有。單形)。

+0

好的,謝謝 - 所以我沒有寫出任何形式的褻瀆:)或「不好的做法」的具體情況,對不對? – Randomize

+0

@Randomize不,我沒有看到你的代碼有問題。 – melpomene

+0

@Randomize否,對於只應計算一次的事物使用頂級綁定是相當習慣的。 – chi