Bir kayan nokta değeri listesi almak istediğimi söyle, sonra bir noktada "toplam" ve "uzunluk" (işlevlerde yerleşik) kullanmam gerekiyor. Kayan nokta değerlerinin rasgele uzunluk listesinin ortalamasını hesaplayan bir işlev yapabilir misiniz?Ön tanımlı işlevleri kullanmadan bir listenin ortalamasını nasıl alırım?
cevap
foldl'
öğesini kullanarak hem çalışanların sayımını hem de çalışan toplamı içeren bir tuple oluşturabilir ve ardından ortalamayı almak için bölebilirsiniz.
data StrictPair a b = StrictPair !a !b
myAvg :: Fractional a => [a] -> a
myAvg [] = error "Empty list"
myAvg list =
let
tupleSum (StrictPair count sum) x = StrictPair (count + 1) (sum + x)
StrictPair totalCount totalSum = foldl' tupleSum (StrictPair 0 0) list
in
totalSum/totalCount
hafıza sorunları önlemek için foldl'
ve StrictPair
kuvvet değerlendirilmesi kullanımı. (Öneri için teşekkürler, @Jubobs, @Zeta ve @dfeuer!)
Çok fazla thunks: p Ara değerlerin zorla değerlendirilmesiyle birlikte sol katlama, benim düşüncemde daha anlamlı olacaktır. Richard Bird, kitabının 7. bölümünde, Haskell * ile işlevsel olarak düşünmenin tam olarak nasıl yapıldığını gösterir. – Jubobs
@Jubobs, Bird'ün "veri çifti" ye eşdeğer yaklaşımıdır. – Zeta
@Zeta Esasen, evet. – Jubobs
Hayır, genel olarak bu imkansızdır. Bir sayı listesinin ortalamasını hesaplamak için toplama ve bölme gereklidir. Bunları Rational
gibi standart türler için hesaplama işlevleri "yerleşik" dir.
- 1. Spring Boot'da ön tanımlı çekirdekler
- 2. SWT Ön tanımlı stillerle kontrol eder
- 3. Ön tanımlı tip 'System.Threading.Tasks.Task', global alias
- 4. OpenCL kullanıcı tanımlı satır içi işlevleri
- 5. En kullanışlı Kullanıcı Tanımlı Agrega İşlevleri
- 6. nasıl listenin
- 7. Adından nasıl bir seçici alırım?
- 8. Toplama işlevleri
- 9. Diğer listenin sonunda bir listenin içeriği nasıl eklenir?
- 10. Sorgu önbelleğini kullanmadan bir Spring Data JPA sorgu yönteminin sonuçlarını nasıl önbelleğe alırım?
- 11. C Oluşturulan işlev adları için işlemci ön tanımlı tanımlama
- 12. Bir veri çerçevesindeki iki sütunun ortalamasını hesaplayın
- 13. Uzunluk işlevini kullanmadan listenin uzunluğuyla ilgili koşul/koşul cümleciğinde nasıl bir koşul olabilir?
- 14. İki sütunun ortalamasını nasıl çalışırım? Microsoft Access
- 15. MYSQL sorgusundaki sütunun ortalamasını hesaplayın
- 16. KDoc belgelerini nasıl alırım?
- 17. Matplotlib için nasıl bir ön uç oluşturabilirim?
- 18. Bir listenin bir öğe içermediğini nasıl anlarsınız?
- 19. Grafik kütüphanesi veya başka kütüphane işlevleri kullanmadan bir nokta/piksel ayarı nasıl yapılır
- 20. Bir Etkinlik Nasıl Ön Yüklenir?
- 21. Listenin sınırlarını nasıl değiştirebilirim?
- 22. Bir Listenin değişken öğeleri
- 23. Değeri anonim bir ifadeden nasıl alırım?
- 24. WinDbg uzantısından bir kullanıcı akışını nasıl alırım?
- 25. Python'da üçüncü taraf bir modülü nasıl alırım?
- 26. Bir UIAlertController eylemini nasıl ele alırım?
- 27. Oprofile çıkışından nasıl bir çağrı alırım?
- 28. JSON verilerini harici bir URL'den nasıl alırım?
- 29. "Eski değeri" bir ReactiveCocoa sinyalinden nasıl alırım?
- 30. Android'de bir kişinin tüm ayrıntılarını nasıl alırım?
"Evet"? Sonuçta, sadece kendi 'length' ve' sum' yazabilirsiniz. Bununla birlikte, "toplamı" ve "uzunluk" kombinasyonunun genellikle sorunlara yol açtığını unutmayın. – Zeta
Neden sorun yaşıyorum? –
çünkü "length" genellikle bir "Int" döndürür ve bir "Float" (toplam) 'ın –
Carsten