從某個值計算屬性的成本很高。所以一旦計算出來,最好能夠存儲這個屬性。我想知道如何正確編碼。帶有商店的模塊
舉個例子吧。假設我們有一個整數類型,很多時候,我們需要計算這種類型的值的主要因素(假設負整數的首要因素是None
):
module I =
struct
type t = C of int
type pf = (int list) option
let calculate_prime_factors (x: t) : pf =
(* a costly function to calculate prime factors *)
... ...
let get_prime_factors (x: t) : pf =
calculate_prime_factors x
end
let() =
let v = I.C 100 in
let pf_1 = I.get_prime_factors v in
let pf_2 = I.get_prime_factors v in
let pf_3 = I.get_prime_factors v in
...
目前,get_prime_factors
只是調用calculate_prime_factors
,因此,所有pf_1
,pf_2
,pf_3
的計算是耗時的。我希望有一種機制來啓用在模塊內部存儲素數因子,以便只要整數不變,第二次和第三次只讀取已存儲的內容。
有誰知道如何修改模塊I
來達到這個目的?
有可能我們需要引用來使此機制成爲可能(例如,let vr = ref (I.C 100) in ...
)。我可以使用引用。但是,如果保持值(即!vr
)發生變化,我不知道如何自動觸發calculate_prime_factors
。
感謝您的解決方案,它存儲了一對整數及其主要因素外。它應該工作,但我寧願尋找一種機制,將結果存儲在模塊內... – SoftTimur
我不明白你的意思。你可以把'my_storage'放在模塊中。 –
我試圖找出一個記錄類型爲「{v:t; pf:pf}'在模塊'I'內。因此,整數'v'及其素數因子'pf'總是一起存儲。這就是我所說的「模塊內部」... – SoftTimur