2012-01-02 4 views
-3

이 함수를 total이라고 정의해야합니다.총계 함수 (고차 함수)

total :: (Int -> Int) -> Int -> Int 

정도로 총 F는 n 값에 + .... + 어떤 도움

감사 FN 합 F0 + F1을주는 함수임을! 부디.


는 일례로서 책 I에 따른 함수의 합성에 대해 알게 :

여기
twice f = (f . f) 

는, f는 함수이며, 그 결과는 그 자체로 이루어지는 F된다. 이 기능을 사용하려면 입력 및 출력 유형이 동일해야합니다. 따라서 우리는

twice :: (a -> a) -> a -> a 

등의 두 인수를 하나씩 취하고 (a -> a) 유형의 함수를 취하고 동일한 유형의 결과를 반환한다고 설명합니다. 후계자가 정수에 하나를 추가 할 수있는 기능, 경우 예를 들어,

successor :: Int -> Int 
successor n = n + 1  
then 
(twice successor) 12 ->(successor . successor) 12 
-> successor (successor 12) -> 14 
+2

정확히 어디 막혔습니까? 특정 함수의 합계를 n까지 계산하는 함수를 작성할 수 있습니까? n까지 모든 자연수를 합산하는 함수를 작성할 수 있습니까? – sepp2k

+0

FYI에서 "총계 함수"는 "부분 함수"와 달리 가능한 모든 입력 값에 대해 정의 된 함수입니다. 혼란을 피하기 위해 제목을 적절하게 편집 할 자유를 얻었습니다. 당신이 찾고있는 것은 합계 기능 일 것입니다. – Ingo

+0

예 @Ingo 정확히 내가 찾고있는 것입니다. 감사! 어떻게 함수를 테스트하고 다른 함수에 대해 어떻게 작동하는지 이해해야합니다. – Amjad

답변

8

귀하의 질문을 올바르게, 다음은 잘되어야합니다.

total f n = sum [ f i | i <- [0..n] ] 

그러나 함수 을 재귀 적으로 정의하면 더 자세히 알게 될 것입니다.. 어떤 total에서 n=0 반환해야합니까? 음 : 그건 당신의 정의에 따라 f 0입니다. 나는.

total f 0 = f 0 
  • 이제 어떻게 n=1 약을? 그게 total f 1 = f 1 + total f 0 == f 1 + f 0입니다.
  • n=2 : total f 2 == f 2 + total f 1.
  • n 일반적으로?

패턴을 참조 하시겠습니까? 이것을 하스켈에 쓸 수 있습니다.

+0

+1보다 내 교육에 대한 +1 –

+0

사실, 그것은 더 많은 감각! :) – Amjad

9

는 쉬운 방법은 다음과 같습니다

total f 0 = f 0 
total f n = total f (n-1) + f n 

는 대안이 될 것이다 : 이해하면

total f n = sum (map f [0..n]) 
+0

감사합니다. WinGHCi에서 어떻게 테스트합니까? – Amjad

+1

유형 '합계 f n = 합계 ...'및 테스트 예 : 'total (\ x -> x * x) 5 '라고 쓰면된다. 위의 패턴 매칭 솔루션에서'total.hs'와 같은 추가 파일을 추천합니다.이 파일은 소스를 GHCi로로드 한 후로드합니다. – Dario

+0

예 : http : //www.haskell.org/haskellwiki/Haskell_in_5_steps –