Programowanie w systemie UNIX/Haskell: Różnice pomiędzy wersjami

Z Wikibooks, biblioteki wolnych podręczników.
Usunięta treść Dodana treść
→‎Cechy Haskella: int., ort., lit.
Linia 9: Linia 9:


=Cechy Haskella =
=Cechy Haskella =
* jest to język czysto funkcyjny. :
* jest to język czysto funkcyjny:
** nie ma zmiennych w znaczenie pojemników na wartości jak np. w [[C]], są stałe ( niewiadome jak w matematyce)
** nie ma zmiennych w znaczenie pojemników na wartości jak np. w [[C]], są stałe (niewiadome jak w matematyce)
** nie ma efektów ubocznych
** nie ma efektów ubocznych
* lenistwo : obliczenia są wykonywane w momencie kiedy ich rezultat jest potrzebny, nie wcześniej. W efekcie możesz definiować nieskończone struktury danych, pod warunkiem , że nie używasz ich w całości.
* lenistwo: obliczenia są wykonywane w momencie kiedy ich rezultat jest potrzebny, nie wcześniej. W efekcie możesz definiować nieskończone struktury danych, pod warunkiem, że nie używasz ich w całości.
* nie ma pętli ( używa rekurencji)<ref>[http://gnosis.cx/publish/programming/Haskell.pdf David Mertz - Haskell tutorial]</ref>
* nie ma pętli (używa rekurencji)<ref>[http://gnosis.cx/publish/programming/Haskell.pdf David Mertz - Haskell tutorial]</ref>
* Funkcje wyższego rzędu - funkcja mogą być argumentami innych funkcji. Umożliwia to składanie przekształceń
* funkcje wyższego rzędu - funkcje mogą być argumentami innych funkcji. Umożliwia to składanie przekształceń
* polimorfizm
* Polimorfizm
* Klasy typów
* klasy typów
* Monady
* monady


=Instalacja=
=Instalacja=

Wersja z 18:24, 29 cze 2013


"A language that doesn't affect the way you think about programming, is not worth knowing. "[1]

Haskell zmieni twój sposób myślenia o programowaniu (:-))

Wykorzystuje teorię kategorii kategorii.[2]

Cechy Haskella

  • jest to język czysto funkcyjny:
    • nie ma zmiennych w znaczenie pojemników na wartości jak np. w C, są stałe (niewiadome jak w matematyce)
    • nie ma efektów ubocznych
  • lenistwo: obliczenia są wykonywane w momencie kiedy ich rezultat jest potrzebny, nie wcześniej. W efekcie możesz definiować nieskończone struktury danych, pod warunkiem, że nie używasz ich w całości.
  • nie ma pętli (używa rekurencji)[3]
  • funkcje wyższego rzędu - funkcje mogą być argumentami innych funkcji. Umożliwia to składanie przekształceń
  • polimorfizm
  • klasy typów
  • monady

Instalacja

Potrzebujemy :

  • kompilator/interpreter (GHC)
  • menadżer pakietów (cabal)
  • edytor ( np. Gedit ma podświetlanie składni Haskella )

Metody :

  • z użyciem standardowych instalatorów ( stabilna ale zwykle nie najnowsza wersja), np. :
    • Centrum Oprogramowania Ubuntu
    • Menadżer Pakietów SYnaptic
  • ręczna najnowszej wersji [4]


Przykłady

Funkcje

Przykład[5]


Haskell

square :: Int -> Int 
square n = n*n 

C

int square(int n) {

return n*n; }


Listy

Listy skończone [6]

sum [1..10]
product [1..10]

Listy nieskończone :

[1,3..]
[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,{Interrupted!}
take 20 [1,3..]
[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39]

Klasy

Monady

Wejście i wyjście

Wczytywanie argumentów :

-- http://zvon.org/other/haskell/Outputsystem/getArgs_f.html
-- save it as a file a.hs
-- runhaskell a.hs 1 33 aaaa
import System
main = do 
x <- getArgs
print x

Wczytywanie pliku tekstowego, którego nazwa jest podana jako argument programu :

-- save it as a file f.hs
-- runhaskell f.hs gruff.txt
import System 
main = do 
args <- System.getArgs
let fileName = head args
print fileName
-- read text file
text <- readFile fileName
--  
putStrLn text

Pliki z kodem w Haskellu

hs

Pliki z roszerzeniem hs zawierają kod Haskella.

Funkcje

Definicję funkcji mojafunkcja zapisz do pliku mojafunkcja.hs W trybie interaktywnym ( ghci) wczytujesz funkcję za pomocą komendy :

:l mojafunkcja 

albo

:r -- reload current script

Moduł

Moduł zawiera kilka funkcji. Każdy moduł to jeden plik. Nazwa modułu odpowiada nazwie pliku, z wyjątkiem modułu głównego.

Standardowe moduły :

Pakiet

Pakiet zawsze zawiera : [8]

  • jeden lub kilka modułów

Może zawierać :

  • kod w języku C
  • pliki nagłówkowe
  • dokumentację
  • testy dla zawartych modułów,
  • dodatkowe narzędzia

Polecenie :

ghc-pkg list

pokazuje listę zainstalowanych pakietów [9]

Możemy poprosić o opis jednego z zainstalowanych modułów, np time :

ghc-pkg describe time

Cabal

Cabal jest to program ułatwiający pracę z pakietami.

Pakiety cabala mogą występować w 3 postaciach :

  • kodu żródłowego (skompresowanego w plikach tar-ball, zip )
  • plikach binarnych
  • specjalnych postaciach : RPM, pakiety Debiana, windows [10]

Program

Kompletny program w Haskellu zawiera jeden lub więcej modułów ( w tym główny moduł Main ) skompilowanych z użyciem pakietów ( w tym pakiet Prelude )

Pierwszy program

Najprostszy program składa się z :[11]

  • jednego głównego pakietu o ( main)
  • jednego głównego modułu (Main)
  • jednej głównej funkcji ( main). [12][13]
-- moduł główny Main
module Main
  (main) -- nazwa eksportowanej funkcji
   where
-- definicja funkcji main
main = putStrLn "Hello world"

Program zapisujemy do pliku, np. w.hs

Jak widać nazwa pliku zawierającego moduł główny nie musi być taka sam jak nazwa modułu.


Program kompilujemy :

ghc -o w w.hs

i uruchomiamy :

./w

Pierwszy projekt

Projekt [14]

hsl

Pliki z rozszerzeniem hsl zawierając kod w stylu programowania piśmiennego ( ang. literate programming) [15]

Jak pracować w Haskellu

  • tryb interaktywny ( ghci)
  • kompilacja kodu ( ghc)
  • z użyciem skryptu runhaskell

runhaskell

Z użyciem skryptu BASHA :

runhaskell m.hs

ghc

W trybie kompilacji najpierw kompilujemy :

ghc -o m  m.hs

potem uruchamiamy wykonywalny plik :

./m

ghci

W trybie interaktywnym :

ghci m.hs

potem uruchamiamy funkcję :

main


Ładowanie ( wczytanie) modułów :

:load + nazwa

Po wczytaniu modułu trzeba go uaktywnić :

:module + nazwa

np. :

:m + Fractal.RUFF.Mandelbrot.Address

uaktywnia moduł Address z pakietu RUFF ( m jest skrótem od module [16])

Zobacz również

Odnośniki

  1. EPIGRAMS IN PROGRAMMING
  2. Teoria kategorii
  3. David Mertz - Haskell tutorial
  4. Gracjan Polak - Instalacja GHC w wersji minimalnej
  5. Podobne Beginning with the Haskell Programming Language by gnosis
  6. Programowanie w Haskellu - Artur Zawłocki
  7. Moduł Prelude
  8. System pakietów Haskella
  9. Pakiety Haslkella
  10. Pakiety w Haskellu
  11. Pakiety w Haskellu
  12. Pliki z kodem żródłowym w ang podręczniku
  13. Aplikacja Haskella w ang wikibooks
  14. Struktura pierwszego projeltu w Haskellu
  15. Programowanie piśmienne w wikipedii
  16. Using GHCi doc