Programowanie w systemie UNIX/Haskell: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
→cabal: unrecognised command: sandbox (try --help): export PATH="$HOME/.cabal/bin:${PATH}" |
literówki, linki, interpunkcja, formatowanie |
||
Linia 6:
[[Haskell]] zmieni twój sposób myślenia o programowaniu (:-))
Wykorzystuje
=Cechy Haskella =
* jest to język czysto funkcyjny:<ref>[http://wazniak.mimuw.edu.pl/index.php?title=Paradygmaty_programowania/Wyk%C5%82ad_10:_Programowanie_funkcyjne_w_Haskellu_I| Paradygmaty_programowania : Małgorzata Moczurad i Włodzimierz Moczurad — Uniwersytet Jagielloński ]</ref>
** nie ma zmiennych w
** 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)<ref>[http://gnosis.cx/publish/programming/Haskell.pdf David Mertz - Haskell tutorial]</ref>
* funkcje wyższego rzędu - funkcje mogą być argumentami innych funkcji. Umożliwia to składanie przekształceń.
* polimorfizm
* klasy typów
Linia 29:
* z użyciem standardowych instalatorów (stabilna, ale zwykle nie najnowsza wersja), np.:
** Centrum Oprogramowania Ubuntu
** Menadżer Pakietów
* ręczna najnowszej wersji <ref>[http://gracjanpolak.wordpress.com/2010/05/17/instalacja-ghc-w-wersji-minimalnej/ Gracjan Polak - Instalacja GHC w wersji minimalnej]</ref>
Linia 72:
product [1..10]
Listy nieskończone (
[1,3..]
Linia 86:
==Wejście i wyjście ==
Wczytywanie argumentów
-- http://zvon.org/other/haskell/Outputsystem/getArgs_f.html
-- save it as a file a.hs
Linia 95:
print x
Wczytywanie pliku tekstowego, którego nazwa jest podana jako argument programu
-- save it as a file f.hs
Linia 112:
==hs==
Pliki z
===Funkcje===
Definicję funkcji ''mojafunkcja'' '''zapisz do pliku''' ''mojafunkcja.hs''
W trybie interaktywnym ( ghci) '''wczytujesz''' funkcję za pomocą komendy
:l mojafunkcja
albo
Linia 128:
Nazwa modułu odpowiada nazwie pliku, z wyjątkiem modułu głównego.
Standardowe moduły
* Prelude<ref>[http://www.haskell.org/onlinereport/standard-prelude.html Moduł Prelude]</ref>
===Pakiet===
Pakiet '''zawsze zawiera'''
* 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
Linia 148:
pokazuje '''listę zainstalowanych pakietów''' <ref>[http://www.haskell.org/ghc/docs/7.0.3/html/users_guide/packages.html Pakiety Haslkella]</ref>
Możemy poprosić o '''opis''' jednego z zainstalowanych modułów, np ''time
ghc-pkg describe time
Linia 154:
====Cabal====
Cabal jest to program ułatwiający pracę z
Pakiety cabala mogą występować w 3 postaciach
* kodu
* plikach binarnych
* specjalnych postaciach
===Program===
Kompletny program w Haskellu zawiera jeden lub więcej modułów (
==== Pierwszy program ====
Najprostszy program składa się z
* jednego głównego pakietu
* jednego głównego modułu (Main)
* jednej głównej funkcji (
-- moduł główny Main
Linia 178:
main = putStrLn "Hello world"
Program zapisujemy do pliku, np. <code>w.hs</code>
Jak widać nazwa pliku zawierającego moduł główny nie musi być taka
Program kompilujemy
ghc -o w w.hs
i uruchomiamy
./w
Linia 195:
==hsl==
Pliki z rozszerzeniem hsl
=Jak pracować w Haskellu =
* tryb interaktywny (
* kompilacja kodu (
* 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 (
:load + nazwa
Po wczytaniu modułu trzeba go uaktywnić
:module + nazwa
np.
:m + Fractal.RUFF.Mandelbrot.Address
uaktywnia moduł Address z pakietu RUFF (
=Problemy=
Linia 239:
==cabal: unrecognised command: sandbox (try --help)==
Może wersja cabala jest za stara
Sprawdzamy
cabal -V
cabal-install version 1.16.0.2
using version 1.16.0 of the Cabal library
upgrade
cabal install cabal-install
oraz
export PATH="$HOME/.cabal/bin:${PATH}"
=Zobacz również=
* [http://www.ia.pw.edu.pl/~mszlenk/ Marcin Szlenk -
* [http://www.slideshare.net/guestc1e6127/haskell-presentation-794922
* [http://wazniak.mimuw.edu.pl/index.php?title=Programowanie_funkcyjne
=Odnośniki=
|