Haskell

Vikipedi, özgür ansiklopedi
Haskell
Haskell logosu
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ümHaskell 2010 (Temmuz 2010 (13 yıl önce) (2010-07))
Test sürümüHaskell 2011
Tip sistemisabit, güçlü, çıkarım
Önemli uygulamalarıGHC, Hugs, NHC, JHC, Yhc, UHC
LehçeleriHelium, Gofer, Hugs, Ωmega
İşletim sistemiÇapraz platform
Olağan dosya uzantıları.hs, .lhs
Web sitesihaskell.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.

Özellikler[değiştir | kaynağı değiştir]

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[değiştir | kaynağı değiştir]

Ö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[değiştir | kaynağı değiştir]