Laboratorium 2: Pierwszy kontakt z Ocamlem

Uruchomienie interpretera Ocamla

W terminalu piszemy:

 
    ab123456@komputer:~$ ocaml
    2+3;;
    ^D
 

(nie działają strzałki itp :-( )

 
    ab123456@komputer:~$ ledit ocaml
 

(dzialaja strzalki! :-)

Parę przykładów funkcji

 
    let f x = x * x;;
 
    let ma co = "Ala ma " ^ co;;
    ma "kota";;
 
    f "kota";;
    (error)
 
    let g x = (f x)^(f x);;
    (error)
 
    let h x = f (f x);;
 
    h 7;;
    h (f 7);;
 
    max_int;;
    max_int+1;;
 
    let rec silnia n = 
      if n = 0 then 1 else n * (silnia (n-1));;
 
    let rec powtorz n s = 
      if n = 0 then "" else s ^ (powtorz (n-1) s);;
 
    let powt3 = powtorz 3;;
 
    let powt_ala n = powtorz n "ala";;
 

Jak pracować z Ocamlem?

Sposób dla malutkich kawałków kodu

W terminalu wpisujemy ocaml (lub lepiej ledit ocaml).
W drugim okienku uruchamiamy edytor i co chwilę kopiujemy kod myszką.

Sposób upierdliwy dla większych kawałków kodu

W terminalu wpisujemy ocaml (lub lepiej ledit ocaml).
W drugim okienku uruchamiamy edytor z plikiem "plik.ml", co chwilę zapisujemy plik w edytorze i wpisujemy #use "plik.ml";;
(albo lepiej wychodzimy z Ocamla, wchodzimy ponownie i wtedy robimy #use "plik.ml";;).
Uwaga: Pisząc #use należy samemu wpisać # (hash - kratkę).

Sposób lepszy dla większych kawałków kodu

Używamy edytora emacs ze wsparciem dla ocamla.

Są jeszcze inne sposoby, ale o nich powiemy jak zaczniemy pracować z
z programami podzielonymi na wiele plików.

Konfiguracja i używanie Ocamla pod emacsem

Konfiguracja

Na końcu pliku ~/.emacs należy dopisać:

 
        ;; Konfiguracja ocaml-mode
        (setq auto-mode-alist (cons '("\.ml[iylp]?$" . caml-mode) auto-mode-alist))
        (require 'caml)
        (require 'camldebug)
        (require 'caml-font)
 

A jeżeli w ogóle nie ma pliku ~/.emacs, to kopiujemy go stąd.

Dodatkowe informacje o instalacji ocaml emacs, np. w domu:
http://www.cs.jhu. edu/~scott/pl/caml/emacs.html

Używanie Ocamla pod emacsem

  • uruchomić: emacs
  • otworzyć plik z rozszerzeniem .ml (np. plik.ml), za pomocą menu, guziczka, Ctrl-X, Ctrl-F lub od razu uruchomić emacs poleceniem emacs plik.ml,
  • napisać kawałek kodu,
  • wykonać (Caml -> Start subshell),
  • na pytanie "Caml toplevel to run: ocaml" odpowiadamy ENTER
    (czyli zgadzamy się na "ocaml" -- tutaj mamy szansę podać np. jakieś opcje
    wywołania polecenia ocaml, ale na razie nie potrzebujemy)
  • wrócić do ramki z naszym plikiem,
  • ustawić kursor _przed_ średnikami ;;
  • wcisnąć Ctrl-c Ctrl-e (polecenie caml-eval-phrase),
  • definicja przed średnikami zostanie automatycznie "przerzucona" do interpretera Ocamla,
    chyba że jest błędna -- wtedy zaznaczony zostanie fragment, w którym kompilator wykrył błąd,
    (uwaga: oczywiście prawdziwy błąd może być zupełnie gdzie indziej ;-)
  • żeby "przerzucić" na raz większy kawałek kodu, zaznaczamy ten kawałek myszką
    (lub zaznaczamy początek Ctrl-Space i ustawiamy kursor na końcu),
  • następnie Alt-x caml-eval-region,
  • "toplevel" ocamla można też normalnie używać np. po to, by testować funkcje,
    nie zaśmiecając przy tym pliku z definicjami.

W przypadku gdy chcemy rozpocząć pracę w ocamlu od nowa:

  • zabijamy interpreter Ocamla (wchodzimy do niego kursorem i robimy C-x C-k, lub File->Close),
  • otwieramy go ponownie (Start subshell),

Pierwsze wprawki w Ocamlu

  1. Zapisać funkcje omawiane na pierwszych ćwiczeniach (np. część wspólna prostokątów, przecinanie się odcinków) lub w tym tygodniu.
  2. Zapisać procedury obliczające liczby Fibonacciego, liniowo i wykładniczo, porównać ich działanie,
  3. Zapisać ogonowo i nieogono silnię czy inne zadania z ćwiczeń -- sprawdzić różnicę w działaniu dla większych argumentów,
  4. Zaimplementuj kodowanie par liczb naturalnych jako liczby naturalne.
    To znaczy, napisz procedurę dwuargumentową, która koduje dwie liczby dane jako argumenty w jednej liczbie naturalnej.
    Dodatkowo napisz dwie procedury, które wydobywają z zakodowanej pary odpowiednio pierwszą i drugą liczbę.
ZałącznikWielkość
emacs.846 bajtów