我的目標是創建函數,該函數將參數,計算結果和返回值以元組的形式返回並修改自身。高階函數返回結果並自行修改
我的第一次嘗試是這樣的:
如果我調用函數CL以0和ff x = (x,f') where
f' y = (y+1,f')
cl num func = let (nu,fu) = func num in nu:fu num
我需要的結果是
[0,1,2,3,4,5,6,7,8,9,10,11,12,13 ... infinity]
不幸的是,哈斯克爾無法構造無限類型。我很難想出另一種做法。也許,我只是從不好的一面看問題,這就是爲什麼我發佈這個問題。
編輯: 這是我的函數的狀態:
newtype InFun = InFun { innf :: Int -> (Int,InFun) }
efunc x = (x,InFun deep) where
deep y = (y+1, InFun deep)
crli n (InFun f) = let (n',f') = f n in n':crli n f'
main = putStrLn $ show (take 10 (crli 0 (InFun efunc)))
結果是[0,1,1,1,1,1,1,1,1,1]。這更好,但是,我想要通過深層函數遞歸進行修改。
你能解釋一下你如何想使用這個功能嗎?這將幫助我們找到解決您的原始問題的方法。 – AndrewC