Bir alıştırma olarak, bir dizenin ilk dört karakterini birleştirilmiş, kısa bir Haskell işlevi yazdım. Ben chars dizeleri dönüştürmek için büyük bir sorun vardı ve çirkin bir replicate
hack başvurdu. Bu işlevi iyileştirmenin en iyi yolu nedir? (Ben desen ve çıkış hem geliştirilebilir olduğunu tahmin ediyorum.)Bu Haskell kodunu daha zarif hale getirmek için nasıl yeniden açmalıyım?
concatFirstFour :: [Char] -> [Char]
concatFirstFour (a:b:c:d:_) = (replicate 1 a) ++ (replicate 1 b) ++ (replicate 1 c) ++ (replicate 1 d)
concatFirstFour xs = error "Need at least four characters."
Güncelleme:, Herkese çok teşekkür ederim. Tüm cevaplardan ve yorumlardan birkaç şey öğrendim. Türleri daha iyi anlıyorum.
initFirstFour :: [a] -> [a]
initFirstFour str
| length str > 3 = take 4 str
| otherwise = error "Need at least four characters."
Güncelleme 2:
İşte kullanıyorum sona erdi kod ptival yorumuna başına xs _ ikinci desen değiştirildi. Tembel değerlendirme FTW.
Güncelleme 3: tew88'nin yorumcısından temizleyici muhafızları.
concatFirstFour :: [a] -> [a] 'daha iyi – alternative
Argümenin işlev gövdesinde hiçbir zaman kullanılmadığından, kodunuzun son satırında' xs 'adlarına gerek olmadığını unutmayın. Bunu wilcard '_' ile değiştirebilirsiniz. – Ptival