~cpp find = [n+1|n <- [1..], (n*(n+1)/2) <= 3000 <= ((n+1)*(n+2)/2)]
=> n의 범위를 무한대의 자연수로 잡고, n까지의 합과 n+1까지의 합 사이에 3000이 들어가는
-> 파싱 에러, 즉 구문 에러가 나는 코드입니다. (<=) 함수가 어떤 전달인자를 받는지 알아보세요.
while 문을 쓰는 것이 필수 보조조건이었는데 haskell도 while문 쓰는 법이 있나요?
-> 그러고 보니 while 함수를 만들어서 써도 되겠다는 생각이..
----
Haskell에서 굳이 반복이란 개념을 사용하지 않아도 되잖아요?ㅋㅋ 최소정수의합/임인택2 도 한 번 보세요.
----
~cpp #include <iostream> using std::cout; using std::endl; int main() { int sum = 0, integer = 1; while(sum <= 3000) { sum = sum + integer; integer++; } cout << "The smallest 'n' for making the number what we want" << endl; cout << "-->" << integer << endl; cout << "Total sum is " << sum << endl; return 0; }
가드 (|)를 써서 조건문 형식으로 다시 짰습니다.
~cpp little_sum (x:xs) y |y <= 0 = 0 |otherwise = x + little_sum xs (y-x)