2013-01-05 2 views
0

저는 초보자이며, haskell에서 행맨 (hangman) 구현을 작성합니다. 단어는 "******" "그림자"와 같은 진보라면리스트 작업

proceed char word progress = let zprog = zip progress [0..] in 
    foldl (\a x -> a ++ [fst x]) "" $ map (f char word) zprog where  
     f c w el = 
      if c == w !! (snd el) then 
       (c, snd el) 
      else 
       el 

, 문자 = '-like 문자열'*가 '현재 내가 그 코드를 사용에서 추측 문자를 표시 할 필요한 s '함수는 "s ****"을 반환합니다.

어떻게 그 기능을 다시 쓸 수 있습니까? 나는 그 깨끗한 해결책이 아니라는 것을 안다. (@luqui에 의해) 해결 방법 :

proceed char = zipWith combine where 
    combine x y 
     | x == char = char 
     | otherwise = y 

("단어"와 하스켈의 ETA-감소 becose zipWith에 "진행"인수 전송) 당신은 zip 생각하는 맞아

답변

2

, 당신은 그냥 갖고있는 것 같다 여분의 일을했다. 적절한 도우미 기능을 쓸 수 있는지 확인하십시오. combine :

proceed char word progress = zipWith combine word progress 
    where 
    combine :: Char -> Char -> Char 
    combine = ? 
+0

젠장, 놀라운! –

+0

재미있게하려면이 함수의 출처에서'word'와'progress'를 모두 삭제 해보십시오. – luqui

+0

와우, 줄이기 (이름에 대해 모르겠다), 그것에 대해 읽었습니다. –