• Artykuły
  • Forum
  • Ciekawostki
  • Encyklopedia
  • Haskell

    Przeczytaj także...
    W programowaniu funkcyjnym, monada jest rodzajem konstruktora abstrakcyjnego typu danych, używanego do wyrażania zmieniających się stanów obliczeń (operacji) zamiast znanych z modelu dziedzinowego zmieniających się stanów danych.Rozszerzenie – sposób oznaczania typu pliku za pomocą sufiksu jego nazwy. Rozszerzenie jest oddzielone od reszty nazwy za pomocą kropki. Ponieważ w nowoczesnych systemach nazwa pliku może sama w sobie zawierać kropki, przyjmuje się, że rozszerzeniem jest część nazwy po ostatniej kropce, a samo rozszerzenie nie zawiera kropek.
    Uniwersytet w Glasgow (ang. University of Glasgow, gael. Oilthigh Ghlaschu) – jeden z czołowych uniwersytetów brytyjskich, założony w 1451, jako historycznie drugi uniwersytet w Szkocji.

    Haskell – czysto funkcyjny język programowania nazwany na cześć Haskella Curry'ego.

    Cechy[]

    Jego specyficzne cechy to m.in.:

  • leniwe wartościowanie (ang. lazy evaluation),
  • monady,
  • statyczny polimorfizm,
  • klasy typów (ang. typeclasses),
  • definiowalne operatory (również możliwość tworzenia nowych),
  • strażnicy,
  • wbudowana obsługa literate programming.
  • Rozszerzenia[]

    Pliki Haskella mają rozszerzenie

  • hs
  • lhs gdy zawierają kod w stylu literate programming.
  • Kompilator[]

    Haskell był początkowo intensywnie rozwijany wokół ośrodka University of Glasgow, popularny kompilator tego języka to Glasgow Haskell Compiler (GHC) kompilujący szybki kod maszynowy porównywalny w szybkości wykonania do kodów z GCC (ok. 1,3 razy wolniejszy niż C).

    Polimorfizm (z gr. wielopostaciowość) - mechanizmy pozwalające programiście używać wartości, zmiennych i podprogramów na kilka różnych sposobów. Inaczej mówiąc jest to możliwość wyabstrahowania wyrażeń od konkretnych typów.Wartościowanie leniwe (ang. lazy evaluation, ewaluacja leniwa) - strategia wyznaczania wartości argumentów funkcji tylko wtedy, kiedy są potrzebne (na żądanie).

    Przykłady[]

    -- Komentarz
    
    silnia 0 = 1
    silnia n = n*silnia(n-1)
    
    silnia n = product [1..n]
    
    fib 0 = 0
    fib 1 = 1
    fib n = fib(n-1) + fib(n-2)
    
    ack(0,y) = y+1
    ack(x,0) = ack(x-1,1)
    ack(x,y) = ack(x-1,ack(x,y-1))
    
    -- przykład użycia strażników
    sign x | x >  0  =  1
           | x == 0  =  0
           | x <  0  = -1
    
    myproduct     = 1
    myproduct (n:m) = n * myproduct m
    
    mysum     = 0
    mysum (n:m) = n + mysum m
    
    -- wyrażenia TreeOfMath mają postać: (Sub (Mult (Leaf 5) (Leaf 4)) (Add (Leaf 3) (Leaf 2)))
    data TreeOfMath =
        Mult TreeOfMath TreeOfMath |
        Div  TreeOfMath TreeOfMath |
        Add  TreeOfMath TreeOfMath |
        Sub  TreeOfMath TreeOfMath |
        Leaf Float
    
    compute (Mult x y) = compute x * compute y
    compute (Div x y)  = compute x / compute y
    compute (Add x y)  = compute x + compute y
    compute (Sub x y)  = compute x - compute y
    compute (Leaf x)   = x
    
    showme (Mult x y) = "(" ++ showme x ++ "*" ++ showme y ++ ")"
    showme (Div x y)  = "(" ++ showme x ++ "/" ++ showme y ++ ")"
    showme (Add x y)  = "(" ++ showme x ++ "+" ++ showme y ++ ")"
    showme (Sub x y)  = "(" ++ showme x ++ "-" ++ showme y ++ ")"
    showme (Leaf x)   = show x
    
    qsort  = 
    qsort (x:xs) = qsort less ++ x:(qsort more)
        where less = [ a | a <- xs, a <  x ]
              more = [ a | a <- xs, a >= x ]
    
    -- lista liczb pierwszych
    primes = map head $ iterate (\(x:xs) -> [ y | y<-xs, y `mod` x /= 0 ]) [2..]
    
    -- lista liczb Fibonacciego
    listFib = 1:1:(zipWith (+) listFib (tail listFib))
    

    Przypisy

    1. Paul Hudak, John Hughes, Simon Peyton Jones, Philip Wadler: A History of Haskell: Being Lazy with Class. 2007. ISBN 978-1-59593-766-7.
    2. Simon Marlow: Announcing Haskell 2010 (ang.). Haskell (lista dyskusyjna). [dostęp 2015-12-12].

    Linki zewnętrzne[]

  • Strona domowa Haskella
  • Wiki poświęcona Haskellowi
  • Literate programming (ang. programowanie piśmienne) - styl programowania oparty na założeniu, że programy komputerowe powinny być pisane z naciskiem na czytelność kodu źródłowego dla ludzi, podobnie do dzieła literackiego.Język programowania – zbiór zasad określających, kiedy ciąg symboli tworzy program komputerowy oraz jakie obliczenia opisuje.



    w oparciu o Wikipedię (licencja GFDL, CC-BY-SA 3.0, autorzy, historia, edycja)

    Warto wiedzieć że... beta

    Programowanie funkcyjne (lub programowanie funkcjonalne) – filozofia i metodyka programowania będąca odmianą programowania deklaratywnego, w której funkcje należą do wartości podstawowych, a nacisk kładzie się na wartościowanie (często rekurencyjnych) funkcji, a nie na wykonywanie poleceń.
    Kompilator – program służący do automatycznego tłumaczenia kodu napisanego w jednym języku (języku źródłowym) na równoważny kod w innym języku (języku wynikowym) . Proces ten nazywany jest kompilacją. W informatyce kompilatorem nazywa się najczęściej program do tłumaczenia kodu źródłowego w języku programowania na język maszynowy. Niektóre z nich tłumaczą najpierw do języka asemblera, a ten na język maszynowy jest tłumaczony przez asembler.
    C – imperatywny, strukturalny język programowania wysokiego poziomu stworzony na początku lat siedemdziesiątych XX w. przez Dennisa Ritchiego do programowania systemów operacyjnych i innych zadań niskiego poziomu.
    Język maszynowy (kod maszynowy) – język programowania, w którym zapis programu wymaga instrukcji bezpośrednio jako liczb, które są rozkazami i danymi bezpośrednio pobieranymi przez procesor wykonujący ten program.
    GCC (ang. GNU Compiler Collection) - zestaw kompilatorów do różnych języków programowania rozwijany w ramach projektu GNU i udostępniany na licencji GPL oraz LGPL.
    Haskell Brooks Curry (ur. 12 września 1900, zm. 1 września 1982) – amerykański matematyk. Najbardziej znany jest ze swoich prac nad logiką kombinatoryczną. Curry jest też znany z paradoksu Curry’ego i izomorfizmu Curry’ego-Howarda.

    Reklama