2014-11-01 1 views
0

방금 ​​하스켈을 배우기 시작했고, 첫 번째 코드를 작성하고 있습니다. 내가 여기서하고있는 것은 두 개의 인수를 취하는 함수를 작성하는 것이다. 각리스트의 길이는 n (nxn 격자를 형성 함) 인 정수 목록의 목록을 반환하며, 각 정수에는 값이있는 확률 p가 있습니다 (1 -p)는 비어 있습니다 (값 없음). 0 = 공백, 1 = 값 인코딩을 사용하고 싶습니다.임의의 패키지를 사용하여 결과를 haskell의 특정 값에 매핑하는 방법?

test :: Int -> Float -> [[Int]]  
test n p = do 
      let values = round(n*n*p) 
       noValues = n*n - values 
      print values 
      print noValues 

    main = do 
     test 4 0.4 

숫자 변수는 우리의 값을 가질 것이다 그리드의 요소 수를 제공하고 noValues ​​우리에게 비어 수를 줄 것이다. 자, 어떤 세포가 가치를 지니고 어떤 세포가 가치가 없을지를 어떻게 결정합니까? 내가 좋아하는 임의의 패키지 사용 계획이었다 : 나에게 값을 부동 목록을 제공

import System.Random 
g <- getStdGen 
take n (randoms g :: [Double]) 

을,하지만 난 내 문제에 이것을 적용 할 수있는 방법을 이해하지 않는, 즉, 방법으로 만들려면 목록을 나열한 다음 값을 0과 1로 매핑 할 수 있습니까?

+0

test''의 유형 서명이 아주 잘못 보이는 같은 격자를 생성 할 수 있습니다. 내부에 무언가를 출력하므로'test'는'IO something'을 리턴해야합니다. 또한'[[Int]]'를 ​​반환하지 않습니다. Haskell을 시작한다면, IO, 임의성, 모나드 및리스트를 포함하기 때문에이 연습은 너무 복잡 할 수 있습니다. 좀 더 간단하게 시작하는 것이 좋습니다. [LYAH] (http://learnyouahaskell.com/)를 따르려고합니다. – chi

+0

@chi 이것은 실제로 숙제에 관한 질문입니다. 같은 수업을하는 사람들이 오늘 아침에 물었습니다 :) – alternative

+0

@alternative 사실 나는 오늘 아침에도 그것을 요구했습니다. 그러나 나는 그 질문에 대해 더 의문의 여지가 있기 때문에 여기에 새로운 질문을 올리라고 충고 한 의견을 읽을 수 있습니다. :) –

답변

0

randoms을 사용하여 필요한 길이의 범위 (0, 1)에 Double의 목록을 생성 한 다음 주어진 임계 값 p을 충족하는 경우 결과 값을 요소 유형에 매핑 할 수 있습니다. 그런 다음 1 차원 목록을 2 차원 표로 변환해야합니다. 임의을 제공

main :: IO() 
main = do 
    gen <- getStdGen 
    let g = genElements gen 0.3 3 
    print g 
+0

나는 당신이 말한 것을 시도했지만 약간의 오류가 있습니다. 내 질문을 편집하여 오류를 넣어, 그것이 무슨 뜻인지 말해 줄 수 있습니까? –

+0

신경 쓰지 마라. 그것을 해결했습니다. 감사! –

0

난 당신이 매개 변수로 p 소요 genValue :: Float -> IO Int 같은 기능을 할 수 있습니다 가정거야과 :

genElements :: (RandomGen g) => g -> Float -> Int -> [[Int]] 
genElements r p n = mkGrid $ map (\d -> if d <= p then 1 else 0) $ take (n*n) (randoms r) 
    where mkGrid r = unfoldr nextRow (r, n) 
     nextRow (_, 0) = Nothing 
     nextRow (es, i) = let (r, rest) = splitAt n es in Just (r, (rest, i-1)) 

당신은 다음과 같은 StdGen로 사용할 임의의 발전기를 전달할 수 있습니다 지시자.

그럼 당신은

grid :: Int -> Float -> IO [[Int]] 
grid n = replicateM n . replicateM n . genValue 
관련 문제