Haskell
Bu maddenin veya maddenin bir bölümünün gelişebilmesi için konuda uzman kişilere gereksinim duyulmaktadır. Ayrıntılar için maddenin tartışma sayfasına lütfen bakınız. Konu hakkında uzman birini bulmaya yardımcı olarak ya da maddeye gerekli bilgileri ekleyerek Vikipedi'ye katkıda bulunabilirsiniz. |
Paradigması | fonksiyonel, tembel/kesin olmayan, modüler |
---|---|
İlk çıkışı | 1990 |
Tasarımcı | Simon Peyton Jones, Lennart Augustsson, Dave Barton, Brian Boutel, Warren Burton, Joseph Fasel, Kevin Hammond, Ralf Hinze, Paul Hudak, John Hughes, Thomas Johnsson, Mark Jones, John Launchbury, Erik Meijer, John Peterson, Alastair Reid, Colin Runciman, Philip Wadler |
Kararlı sürüm |
Haskell 2010 (Temmuz 2010) ) |
Test sürümü | Haskell 2011 |
Tip sistemi | sabit, güçlü, çıkarım |
Önemli uygulamaları | GHC, Hugs, NHC, JHC, Yhc, UHC |
Lehçeleri | Helium, Gofer, Hugs, Ωmega |
İşletim sistemi | Çapraz platform |
Olağan dosya uzantıları |
.hs , .lhs |
Web sitesi | haskell.org |
Haskell, isim babası matematikçi Haskell Curry olan arı işlevsel programlama dilidir. Haskell'i birçok programlama dilinden ayıran özellikleri tembel değerlendirme, monadlar ve tür sınıflarıdır. Haskell, Miranda dilinin semantikleri üzerine kuruludur. Akademide yoğun olarak kullanılmasıyla birlikte endüstride de kullanılmaktadır.
Özellikler
Haskell tembel değerlendirme, örüntü eşleme, tip sınıfları, tip polimorfizmi özelliklerini barındırır. Fonksiyonlarının yan etkilere sebep olmaması nedeniyle arı işlevsel bir dil olarak bilinir.
Haskell'in birçok uyarlaması bulunmaktadır. Bunlar arasında de facto lider olan Glasgow Haskell Compiler'dır. GHC en çok Haskell Platform ile birlikte kullanılır. Haskell Platform içinde GHC, Cabal Paket Yöneticisi ve birçok geniş kullanımı olan Haskell kütüphanesini barındırır, Haskell için tam teşekküllü bir platform sunar.
Kod örnekleri
Örnek bir Merhaba dünya Haskell kodu:
module Main where
main :: IO ()
main = putStrLn "Merhaba Dünya!"
Haskell'de farklı yaklaşımlarla yazılmış faktöriyel fonksiyonu örnekleri:
-- Tip tanımı (opsiyonel)
factorial :: (Integral a) => a -> a
-- Özyineleme kullanılarak
factorial n | n < 2 = 1
factorial n = n * factorial (n - 1)
-- Özyineleme ve guard kullanılarak
factorial n
| n < 2 = 1
| otherwise = n * factorial (n - 1)
-- Örüntü eşleme (Pattern matching) kullanmadan özyineleme kullanarak
factorial n = if n > 0 then n * factorial (n-1) else 1
-- Liste kullanılarak
factorial n = product [1..n]
-- fold kullanılarak (product fonksiyonunu implement ederek)
factorial n = foldl (*) 1 [1..n]
-- Point-free stili ile
factorial = foldr (*) 1 . enumFromTo 1
Bir hızlı sıralama uyarlaması:
quickSort :: Ord a => [a] -> [a]
quickSort [] = [] -- Boş liste zaten sıralıdır
quickSort (x:xs) = quickSort [a | a <- xs, a < x] -- Listenin sol tarafını sırala
++ [x] ++ -- Pivotu iki sıralı liste arasına yerleştir
quickSort [a | a <- xs, a >= x] -- Listenin sağ tarafını sırala