Mem*_*emo 3 haskell input output
如何将函数的输出作为另一个函数的输入传递.
例如,我有这两个功能
collatz :: (Integral a) => a -> [a]
collatz 1 = [1]
collatz n
|even n = n:collatz (n `div` 2)
|odd n = n:collatz (n*3 + 1)
Run Code Online (Sandbox Code Playgroud)
而我的另一个功能
length' [] = 0
length' (x:xs) = 1 + length' xs
Run Code Online (Sandbox Code Playgroud)
我想计算列表的长度,这是从我的collatz函数输出的.
最后我想完全计算这个
numLongChains :: Int
numLongChains = length (filter isLong (map collatz [1..100]))
where isLong xs = length xs > 15
Run Code Online (Sandbox Code Playgroud)
但一步一步.
你在谈论功能组成:
-- assuming signature length' :: [a] -> Int
composed :: (Integral a) => a -> Int
composed = length' . collatz
Run Code Online (Sandbox Code Playgroud)
我不确定你是什么意思'一步一步',但对于你的第二个问题,它将是:
numLongChains :: (Integral a) => [a] -> Int
numLongChains = length' . (filter isLong) . (map collatz)
where isLong xs = length' xs > 15
Run Code Online (Sandbox Code Playgroud)
我使它成为一个一元函数,因此它可以用于任何列表,而不仅仅是[1..100].
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |