2009-09-09 4 views
10

저는 여전히 새롭고 함수에서 사용하기 위해 목록을 만들려고하고 가능한 한 작게 유지하려고합니다.이 경우 logBase x y가됩니다. 하지만이 목록에서 사용할 수있는 logBase를 가져 오는 데 문제가 있습니다.Haskell에서 Float을 Int로 변환합니다.

[1 .. (logBase의 x 및 y)]

상관 제안?

답변

10

당신은 당신이 얻을 어떤 종류의 오류 게시하지 않습니다,하지만 난 그것을 이런 식으로 뭔가 상상 :

Prelude> let x = 2 
Prelude> let y = 7 
Prelude> [1 .. (logBase x y)] 

<interactive>:1:7: 
    No instance for (Floating Integer) 
     arising from a use of `logBase' at <interactive>:1:7-17 
    Possible fix: add an instance declaration for (Floating Integer) 
    In the expression: (logBase x y) 
    In the expression: [1 .. (logBase x y)] 
    In the definition of `it': it = [1 .. (logBase x y)] 

문제가 있다는 것입니다 :

Prelude> :t logBase 
logBase :: (Floating a) => a -> a -> a 

는 부동 클래스의 형식을 반환 프로그램의 다른 변수 (1, 'x', 'y')는 정수형입니다.

정수 시퀀스가 ​​필요한가요?

Prelude> :set -XNoMonomorphismRestriction 
Prelude> let x = 2 
Prelude> let y = 42 
Prelude> [1 .. truncate (logBase x y)] 
[1,2,3,4,5] 

잘라 내기, celing 또는 바닥을 사용하십시오.

2

아마도 반올림, 자르기, 바닥 또는 천장 기능을 원할 것입니다. Ints와 Floats는 다른 타입이기 때문에 (당신이 보았 듯이) 컴파일러는 이들을 혼합 할 수 없습니다. 잠시 후에 참조 할게.

8

아마도 기능 목록 중 하나가 필요합니다. here. HoogleHayoo!은 원하는 유형의 함수를 넣고 함수 목록을 다시 가져올 수있게 해주므로 이런 종류의 작업에 훌륭한 도구입니다. Haskell의 풍부한 유형 시스템을 사용하면 동적 유형 지정 언어 또는 C 또는 Java와 같은 정적 유형 언어보다 훨씬 유용한 도구가 될 수 있습니다.

관련 문제