2014-11-17 3 views
0

나는 다항식 데이터 형식을 취하여이를 나타내는 함수로 컴파일하는 함수를 작성하고 있습니다. 예컨대두 함수를 사용하여 그 결과를 더하는 함수를 반환합니다.

은 (상수 4) 다만 상수 4

는 (폴리 폴리 추가) 할 수있는 추가 (상수 1) (상수 4) 함수는 함수를 리턴해야하는

(\ n-> 1 + 4)

변수를 추가 (상수 1)했다면 함수는 (\ n-> 1 + n)을 반환해야합니다.

문제는 최상위 수준에, 내가 실행 가능하게 (\ N-> N) (\ N-> N으로 돌아 오는 (이 두 함수를 반환 컴파일하려면 어떻게

makePoly :: Poly -> (Int->Int) 
makePoly (PConst n) = \n->n 
makePoly (Add p1 p2) = makePoly p1 ?? makePoly p2 <- what should I do here? 

을 가지고 있다는 것입니다) 둘 다 상수라면) 추가로? 두 가지 함수를 사용하여 출력의 합계를 반환하는 도우미 함수를 추가해야합니까?

편집 : 그렇다면이 경우 어떻게해야합니까?

add :: (Int->Int)->(Int->Int)->(Int->Int) 
add f g = ? 

편집 다시 : user5402 @에 의해 주어진 검색 사람에 대한 대답 :

makePoly (Add p1 p2) = (\n -> (makePoly p1) n + (makePoly p2) n) 

답변

1
makePoly (Add p1 p2) = (\n -> (makePoly p1) n + (makePoly p2) n) 

외식 :

  1. 최초의 폴리 만들기 :
  2. makePoly p1가 그것을 평가를 n : (makePoly p1) n
  3. 두 번째와 동일 : (makePoly p2) n
  4. 함께 추가하고 람다를 감싸십시오.

이렇게하면 add f g을 정의하는 방법을 알려줍니다.

makePoly (PConst n) = \n->n 
        ^

세 번째 n 두 번째 n이 아닌 첫 번째 n를 참조합니다 :

는 또한 여기에 문제가 있습니다.

+0

감사합니다. 아마도 makePoly (PConst x) = \ n-> x와 같을까요? – Aserian

+0

또한, 제쳐두고 ... 테스트 목적으로 반환 된 함수의 표현을 GHCI에서 어떻게 인쇄 할 수 있습니까? – Aserian

+0

'PConst' 대소 문자를 수정하면 가능합니다. 'n ='이 사용되지 않으므로 다음과 같이 쓸 수도 있습니다 :'... = \\ _ -> x' – ErikR

관련 문제