Haskell
![]() | |
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 (14 yıl önce) (2010-07)) |
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 ve endüstride yoğun olarak kullanılmaktadır.
Öğretim, araştırma ve endüstriyel uygulamalar için tasarlanan Haskell, tip güvenli işleç aşırı yüklemesine olanak tanıyan tip sınıfları ve monadik giriş/çıkış (IO) gibi bir dizi programlama dili özelliğine öncülük etmiştir. İsmini mantıkçı Haskell Curry'den almıştır.[1] Haskell'in ana uygulaması Glasgow Haskell Derleyicisidir (GHC).
Haskell'in semantiği tarihsel olarak, ilk Haskell çalışma grubunun çabalarına odaklanmaya hizmet eden Miranda programlama dilinin semantiğine dayanmaktadır.[2] Dilin son resmi spesifikasyonu Temmuz 2010'da yapılırken, GHC'nin gelişimi Haskell'i dil uzantıları yoluyla genişletmeye devam etmektedir.
Ö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 gerçeklenimi bulunmaktadır. Bunlar arasında de-facto lider olan Glasgow Haskell Compiler'dır. GHC ve diğer araçlar GHCup yükleyicisi kullanılarak edinilebilir.
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
Dış bağlantılar
- "Glasgow Haskell Compiler". 13 Mart 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Mart 2024.
- "GHCup". 13 Mart 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Mart 2024.
![]() | Programlama dili ile ilgili bu madde taslak seviyesindedir. Madde içeriğini genişleterek Vikipedi'ye katkı sağlayabilirsiniz. |
- ^ "A History of Haskell: Being Lazy With Class April 16, 2007" (PDF). 21 Ağustos 2024. Erişim tarihi: 21 Ağustos 2024. 22. harf sırasında bulunan
|başlık=
parametresi line feed character içeriyor (yardım)Arşivlenmesi gereken bağlantıya sahip kaynak şablonu içeren maddeler (link) - ^ Edward Kmett, Edward Kmett – Type Classes vs. the World