2012-09-12 10 views
-3

이 프로그램은 단어를 세는 것에 관한 것이지만 헤더에 오류가 발생하여 고칠 수 없습니다. 컴파일러가 찾지 못했고 -v을 사용하도록 요청했지만이 또한 오류를 발생시킵니다. 벡터에 사용해야하는 다른 파일은 무엇입니까?import not found

{-# LANGUAGE BangPatterns, MagicHash #-} 

import qualified Data.Vector.Unboxed as VU 
import Data.Vector.Unboxed ((!)) 
import qualified Data.Vector.Generic as VG --this one 
import GHC.Base (Int(..), quotInt#, remInt#) 

ones, tens, teens :: [String] 
ones = ["", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"] 
tens = ["", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"] 
teens = ["ten", "eleven", "twelve", "thirteen", 
"fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"] 

wordify :: Int -> String 
wordify n 
    | n < 10   = ones !! n 
    | n < 20   = teens !! (n-10) 
    | n < 100  = splitterTen 
    | n < 1000  = splitter 100 "hundred" 
    | n < 1000000 = splitter 1000 "thousand" 
    | otherwise  = splitter 1000000 "million" 
     where 
     splitterTen = let (t, x) = n `quotRem` 10 
         in (tens !! t) ++ wordify x 
     splitter d suffix = let (t, x) = n `quotRem` d 
          in (wordify t) ++ suffix ++ wordify x 

wordLength :: Int -> Int 
wordLength i = go 0 i 
    where 
    go !pad !n 
     | n < 10   = lenOnes `VG.unsafeIndex` n + pad 
     | n < 20   = lenTeens `VG.unsafeIndex` (n-10) + pad 
     | n < 100  = go (lenTens `VG.unsafeIndex` (n//10) + pad) (n%10) 
     | n < 1000  = go (go (7+pad) (n//100)) (n%100) 
     | n < 1000000 = go (go (8+pad) (n//1000)) (n%1000) 
     | otherwise  = go (go (7+pad) (n//1000000)) (n%1000000) 

    (I# a) // (I# b) = I# (a `quotInt#` b) 
    (I# a) % (I# b) = I# (a `remInt#` b) 
    !lenOnes = VU.fromList [0,3,3,5,4,4,3,5,5,4] -- "", "one","two", ... 
    !lenTens = VU.fromList [0,3,6,6,5,5,5,7,6,6] 
    !lenTeens = VU.fromList [3,6,6,8,8,7,7,9,8,8] -- first element is "ten" 3 
+3

당신이 얻은 오류, 당신이 사용하는 코드와 OS를 컴파일하거나 실행하는데 사용하는 명령 줄을 질문에 추가해야합니다. – nponeccop

+1

또한 컴파일러 버전을 추가해야합니다. –

+1

오류는 'Data.Vector.Generic'모듈을 찾을 수 없습니다. 검색된 파일의 목록을 보려면 -v를 사용하십시오. 내 OS는 내 컴파일러는 Windows ghci 2012.2.0.0 – user1664205

답변

2

을 그것은 당신에게

  • 여기
  • 가 고정 된 버전 들여 쓰기에게 깨진 적이

    1. 미스 확장을 보인다 여기

      내가 컴파일하기 위해 노력하고있어 코드입니다 :

      {-# LANGUAGE MagicHash, BangPatterns #-} 
      
      import qualified Data.Vector.Unboxed as VU 
      import Data.Vector.Unboxed ((!)) 
      import qualified Data.Vector.Generic as VG --this once 
      import GHC.Base (Int(..), quotInt#, remInt#) 
      
      ones, tens, teens :: [String] 
      ones = ["", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"] 
      tens = ["", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"] 
      teens = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eig hteen", "nineteen"] 
      
      wordify :: Int -> String 
      wordify n 
      | n < 10   = ones !! n 
      | n < 20   = teens !! (n-10) 
      | n < 100  = splitterTen 
      | n < 1000  = splitter 100 "hundred" 
      | n < 1000000 = splitter 1000 "thousand" 
      | otherwise  = splitter 1000000 "million" 
          where 
          splitterTen = let (t, x) = n `quotRem` 10 
          in (tens !! t) ++ wordify x 
          splitter d suffix = let (t, x) = n `quotRem` d 
          in (wordify t) ++ suffix ++ wordify x 
      
      wordLength :: Int -> Int 
      wordLength i = go 0 i 
          where 
          go !pad !n 
          | n < 10   = lenOnes `VG.unsafeIndex` n + pad 
          | n < 20   = lenTeens `VG.unsafeIndex` (n-10) + pad 
          | n < 100  = go (lenTens `VG.unsafeIndex` (n//10) + pad) (n%10) 
          | n < 1000  = go (go (7+pad) (n//100)) (n%100) 
          | n < 1000000 = go (go (8+pad) (n//1000)) (n%1000) 
          | otherwise  = go (go (7+pad) (n//1000000)) (n%1000000) 
      
          (I# a) // (I# b) = I# (a `quotInt#` b) 
          (I# a) % (I# b) = I# (a `remInt#` b) 
          !lenOnes = VU.fromList [0,3,3,5,4,4,3,5,5,4] -- "", "one","two", ... 
          !lenTens = VU.fromList [0,3,6,6,5,5,5,7,6,6] 
          !lenTeens = VU.fromList [3,6,6,8,8,7,7,9,8,8] -- first element is "ten" 3 
      

      두 개의 비표준 언어 확장을 사용한다는 것을 나타 내기 위해 시작 부분에 고정 들여 쓰기와 LANGUAGE pragma에 유의하십시오.

      ghc-pkg vector을 실행하고 vector-0.9.1과 같은 메시지가 표시되지 않으면 cabal update 다음에 cabal install vector을 실행해야합니다.

    +0

    미안하지만 뭐가 뭐야? – user1664205

    +0

    http://hackage.haskell.org/trac/hackage/wiki/CabalInstall을 참조하십시오. Haskell을위한 라이브러리 설치 프로그램입니다. 하스켈 플랫폼과 함께 제공됩니다. 'ghc-pkg vector'가 라이브러리 버전을 보여주지 못하면 - 당신은 벡터 라이브러리가 설치되어 있지 않고 설치해야 함을 의미합니다. 'cabal install {library name}'을 실행하는 것이 라이브러리를 설치하는 가장 좋은 방법입니다. – nponeccop

    +0

    어디에서이 명령을 쓸 수 있습니까? – user1664205