factograf
TR
Sign in

matematiksel, fonksiyonel programlama dili

Haskell

Haskell
All data from the card 9
Paradigması
fonksiyonel, tembel/kesin olmayan, modüler
İlk çıkışı
1990
Kararlı sürüm
Haskell 2010 (Temmuz 2010))
Test sürümü
Haskell 2011
Ö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 saf 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. 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. 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

Read next

In 57 languages

Text from Wikipedia, CC BY-SA 4.0 · Source article