lol :: IO int
lol = go -1 0 0 0
where go k m n p = case k of
-1 -> do{
q <- readLn ;
go 0 0 0 q
}
p -> do{
putStrLn $ show $ n
}
_ -> do{
q <- readLn ;
go (k+1) q (if q > m then n+q-m else n) p
return()
}
我(一个haskell初学者)正在做一些练习题。我写了一个递归函数,但我不知道如何在main中使用它。请帮我解决这个问题。这是我在C ++中的想法,我接受了它。
#include<iostream>
using namespace std;
int main(){
long long int prev=0;
long long int count,ans=0;
cin >> count;
long long int p;
for(int i=0; i<count ;i++){
cin >> p;
if(p>prev){
ans+=p-prev;
}
prev=p;
}
cout << ans << endl;
}
答案 0 :(得分:2)
有几种语法错误:
where
(以及所有后续行)return ()
还有一个类型错误:你应该写lol :: IO ()
。修复这些内容后,您可以编写main = lol
来使用它(或只是将其命名为main
而不是lol
)。不知道它是否能完成它应该做的事情,但这似乎是你应该能够在它运行后进行测试的东西。
答案 1 :(得分:2)
这个怎么样?我只是直接从C ++中翻译它
module Main where
go :: Int -> Int -> Int -> IO Int
go i prev acc
| i > 0 = do p <- readLn
if p > prev
then go (i-1) p (acc + (p - prev))
else go (i-1) p acc
| otherwise = return acc
main :: IO ()
main = do
count <- readLn :: IO Int
ans <- go count 0 0
print ans