我有两个由纯函数组成的函数。第一个函数取一个地块,在上面盖房子,然后拍张照片在杂志上做广告:
let buildAndAdvertiseHouse parcel =
parcel
|> inspect
|> buildWalls
|> buildRoof
|> takePhoto
|> advertise
第二个函数也需要一个地块,在上面盖房子,然后给它画龙点睛:
let buildAndCompleteHouse parcel =
parcel
|> inspect
|> buildWalls
|> buildRoof
|> paintWalls
|> addFurniture
很明显,这两个函数也是纯函数,因为它们是纯函数的组合。现在我有一个包裹,比方说niceParcel
,我想将这两个功能都应用到它上面。但是,我想避免前三个子函数被计算两次,因为它们需要很长时间来计算并且它们在两个函数之间共享。
如何重构我的代码,避免这些不必要的计算,同时保留这些具有明确含义的漂亮纯函数?