純粋関数の合成である 2 つの関数があります。最初の関数は区画を受け取り、その上に家を建て、雑誌で宣伝するために写真を撮ります。
let buildAndAdvertiseHouse parcel =
parcel
|> inspect
|> buildWalls
|> buildRoof
|> takePhoto
|> advertise
2 番目の関数も区画を受け取り、その上に家を建て、仕上げを加えます。
let buildAndCompleteHouse parcel =
parcel
|> inspect
|> buildWalls
|> buildRoof
|> paintWalls
|> addFurniture
2 つの関数も純粋関数の合成であることは明らかです。今、区画があり、niceParcel
両方の機能をそれに適用したいとします。ただし、最初の 3 つのサブ関数は計算に時間がかかり、2 つの関数間で共有されるため、2 回計算されることは避けたいと思います。
コードをリファクタリングして、これらの不要な計算を回避し、明確な意味を持つこれらの素晴らしい純粋な関数を維持するにはどうすればよいですか?