我有两个函数,它们是纯函数的组合.第一个功能需要一个包裹,在其上建一个房子,然后拍照以在杂志上刊登广告:
let buildAndAdvertiseHouse parcel =
parcel
|> inspect
|> buildWalls
|> buildRoof
|> takePhoto
|> advertise
Run Code Online (Sandbox Code Playgroud)
第二个功能还包括一个包裹,在它上面建一个房子,并为它添加一个画龙点睛:
let buildAndCompleteHouse parcel =
parcel
|> inspect
|> buildWalls
|> buildRoof
|> paintWalls
|> addFurniture
Run Code Online (Sandbox Code Playgroud)
很明显,这两个函数也是纯粹的,因为它们是纯函数的组合.现在我有一个包裹,让我们说niceParcel,我想将两个功能应用于它.但是,我想避免前三个子函数计算两次,因为它们需要花费大量时间进行计算,并且它们在两个函数之间共享.
我如何重构我的代码,以避免这些不必要的计算,同时保留这些具有明确含义的纯函数?