2013-01-05 3 views
0

Я новичок и пишу об осуществлении палача в haskell. Необходимо показать угадывания символов '* „-как строка, в настоящее время я использую этот код:Работа со списками

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 

Если слово было„тень“и прогресс, как„******“, символ =“ s 'возвращает "s ****".

Как я могу переписать эту функцию? Я вижу, что это не чистое решение. Решение (по @luqui):

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

(«слово» и «прогресс» аргументы трансфертов в zipWith becose эты-восстановительный Хаскеля)

ответ

2

Вы правильно думать о zip, просто, кажется, сделал некоторую дополнительную работу. Посмотрите, сможете ли вы написать подходящую вспомогательную функцию. combine:

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

Чёрный человек, изумительный! –

+0

Для дополнительного удовольствия попробуйте удалить все вхождения 'word' и' progress' из источника этой функции – luqui

+0

Ничего себе, редукция (не знаю о имени), я прочитал об этом, спасибо. –

Смежные вопросы