2016-04-13 13 views
0

Kendisini birden çok kez çağırması gereken bir işlevi uygularken bazı sorunlar yaşıyorum. Her güncellemesinde değerleri vardır ve doğruluğunu artırır. Bu süreçte diğer fonksiyonları çağırmaktadır, ama budan kadar çalıştığını biliyorum: işlev çağrısıHaskell, özyinelemeli çağrı, birçok argüman

Type = [Double] 
*All lists; including type: Same, but not predetermined length. 


f0 :: Double -> [[Double]] -> [Double] -> Type -> Type 

Tipik örnek: Yapmak istediğim ne

f0 1.0 [[1.0, 0.5, 1.0], [1.0, -1.0, 1.0]] [1.0, 0.0] (initTypeLength 2) 

:

f1 :: Int -> Double -> [[Double]] -> [Double] -> Type -> Type 

... burada "Int" (i) yineleme sayısını çağırarak, yinelemeli olarak, tüm parametreleri, güncellenen tür dışında aynı tutuyor.

f0 alakalı emin değil ise

fakat durumda: nerede ve nasıl argümanlar vardır belirtilecektir Ne beni karıştırır

f0 a (x:xs) (y:ys) type = f_other a xs ys 
         $ f_yet_another a x y type 

olduğunu.

Özetle: Buradaki her şey bir liste dışında durağan; Her yinelemede güncellenen "Tür". Bunu nasıl ararım? Açık olduğu hissine kapıldım ama bunu anlayabildiğim bir şekilde anlayamıyorum.

cevap

2

Ben ne istediğini olduğunu düşünüyorum bu:

f1 k a b c t = (iterate (f0 a b c) t) !! k 

Ancak, tip Haskell bir anahtar kelime, yani bir değişken adı olarak kullanan dikkatli olmak olduğunu.

iterate :: (a -> a) -> a -> [a] 
iterate f x = x : iterate f (f x) 
:

Ayrıca, eğer nasıl iterate çalışmalarına olarak meraklı, burada bir uygulamasıdır