C++ 如何在Haskell中使用递归函数? lol::IO int lol=go-100 其中k m n p=的情况k -1->do{ q do{ putStrLn$show$n } _->做{ q m然后n+q-m其他n)p 返回() } 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() } #包括 使用名称空间std; int main(){ long-long-int-prev=0; 长整型计数,ans=0; cin>>计数; 长整型p; 对于(inti=0;i>p; 如果(p>prev){ ans+=p-prev; } prev=p; } cout
有几个语法错误:C++ 如何在Haskell中使用递归函数? lol::IO int lol=go-100 其中k m n p=的情况k -1->do{ q do{ putStrLn$show$n } _->做{ q m然后n+q-m其他n)p 返回() } 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() } #包括 使用名称空间std; int main(){ long-long-int-prev=0; 长整型计数,ans=0; cin>>计数; 长整型p; 对于(inti=0;i>p; 如果(p>prev){ ans+=p-prev; } prev=p; } cout,c++,haskell,recursion,C++,Haskell,Recursion,有几个语法错误: 将负数用作参数时,在其周围添加括号 为避免在模块块中重新开始一行,请稍微缩进其中的(以及所有后续行) 将缺少的分号添加到return() 还有一个类型错误:您应该编写lol::IO()。修复这些错误后,您可以编写main=lol来使用它(或者简单地将其命名为main,而不是lol)。不知道它是否执行了它应该执行的操作,但这似乎是一件您应该能够在它运行后进行测试的事情。有几个语法错误: 将负数用作参数时,在其周围添加括号 为避免在模块块中重新开始一行,请稍微缩进其中的(以及
- 将负数用作参数时,在其周围添加括号
- 为避免在模块块中重新开始一行,请稍微缩进
其中的
(以及所有后续行)
- 将缺少的分号添加到
return()
还有一个类型错误:您应该编写
lol::IO()
。修复这些错误后,您可以编写main=lol
来使用它(或者简单地将其命名为main
,而不是lol
)。不知道它是否执行了它应该执行的操作,但这似乎是一件您应该能够在它运行后进行测试的事情。有几个语法错误:
- 将负数用作参数时,在其周围添加括号
- 为避免在模块块中重新开始一行,请稍微缩进
其中的
(以及所有后续行)
- 将缺少的分号添加到
return()
还有一个类型错误:您应该编写
lol::IO()
。修复这些错误后,您可以编写main=lol
来使用它(或者简单地将其命名为main
,而不是lol
).不知道它是否做了它应该做的事情,但这似乎是一件你应该能够在它运行后进行测试的事情。这个怎么样。我只是直接从C翻译过来的++
modulemain其中
转到::Int->Int->Int->IO Int
上一节课
|i>0=do p prev
然后转到(i-1)p(acc+(p-上一个))
其他go(i-1)p acc
|否则=返回acc
main::IO()
main=do
count这个怎么样?我只是直接从C翻译过来的++
modulemain其中
转到::Int->Int->Int->IO Int
上一节课
|i>0=do p prev
然后转到(i-1)p(acc+(p-上一个))
其他go(i-1)p acc
|否则=返回acc
main::IO()
main=do
计算函数的用途?解释。在Haskell中,递归函数通常需要至少两个参数,其中有一组元素的开头和结尾。函数的用途是什么?解释。在Haskell中,递归函数通常需要至少两个参数,其中有一组元素的开头和结尾元素。您使用fmap
的方式会堆积一堆“堆栈”。您应该将ans
作为go
的参数(并严格要求)。或者使用StateT
或(效率较低的)一个IORef
@dfeur,因为您要求:)我没有把acc
严格要求,毕竟,我们追求的是清晰的听力,而不是性能。有了BangPatterns
,这就像go I prev!acc=…
一样简单。但我想你不会觉得自己是一个语言杂注。@dfeuer确切地说。:)你使用fmap
的方式会堆积一堆“堆栈”。您应该将ans
作为go
的参数(并使其严格)。或者使用StateT
或(效率较低)一个IORef
@dfeuer,既然你问:)我并没有严格要求acc
,毕竟,我们追求的是清晰的听觉,而不是性能。有了BangPatterns
,这很简单,就像go I prev!acc=…
。但我想你不会觉得自己是一个语言杂注。@dfeuer确切地说:)
#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;
}