Aynı argümanları alan çeşitli işlevlere sahip bir program yazıyorum. Haskell: Hepsi aynı argümanları alan bir işlevler grubu nasıl organize edilir
buildPhotoFileName time word stamp = show word ++ "-" ++ show time ++ show stamp
buildAudioFileName time word = show word ++ "-" ++ show time ++ ".mp3"
buildDirectoryName time word = show word ++ "_" ++ show time
Ben zamanında
time
ve
word
parametrelerini almak için IO bir kaynak üzerinde döngü ediyorum ki: Burada basitlik için biraz yapmacık bir örnektir.
let photo = buildPhotoFileName time word stamp
audio = buildAudioFileName time word
dir = buildDirectoryName time word
in ....
Bu ilkeyi "Do not tekrar" ihlali gibi görünüyor: Bu döngü olarak, bunu yapmak o kadar fazla işlem için yukarıda fonksiyonların sonuçlarını katılması gerekir.
let wrd = processWord word
photo = buildPhotoFileName time wrd stamp
audio = buildAudioFileName time wrd
dir = buildDirectoryName time wrd
in ....
ve ben word
yazdım her seferinde değiştirmek zorunda kalacak: Ben word
alarak bir işleve word
değiştirmek istiyorum bulmak yolda, ben şöyle let
ifadenin başına bağlayıcı yeni bir hale getirebileceğini wrd
numaralı telefona, bazı işlev çağrılarını değiştirmeyi hatırlıyorum, ancak diğerlerini değil, hatalara yol açıyor.
OOP'da, yukarıdaki işlevleri, kurucusu time
ve word
argümanları olarak alacak bir sınıfa yerleştirerek çözerim. Anlatılan nesne esas olarak, time
ve word
'a bağlanan üç işlev olacaktır. Ardından, işlevlerin "argüman" olarak word
yerine processWord word
aldığından emin olmak için, kurucuda processWord
'u arayabilirim.
İşlevsel Programlama ve Haskell için daha uygun olacak daha iyi bir yolu nedir?
tarafından basitleştirmek başladı. Bu hileyi daha önce hiç görmemiştim, ancak bu, arka görüşte oldukça açık. Küçük bir not: üç sonuç dizgisi parçaları paylaşır, bu yüzden bazılarını açıkça paylaşmaları için izin verebilirsiniz diye düşünüyorum. –
@ AndrásKovács [Ortak alt-çıkarma eleme] işlemini gerçekleştiren derleyiciden dolayı gerek yoktur (http://stackoverflow.com/q/15084162/485115). –