From c5fcf7179a83ef65c86c6a4a390029149e518649 Mon Sep 17 00:00:00 2001 From: Franciszek Malinka Date: Tue, 5 Oct 2021 21:49:54 +0200 Subject: Duzy commit ze smieciami --- semestr-3/pf/lista3/procc.mli | 55 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 semestr-3/pf/lista3/procc.mli (limited to 'semestr-3/pf/lista3/procc.mli') diff --git a/semestr-3/pf/lista3/procc.mli b/semestr-3/pf/lista3/procc.mli new file mode 100644 index 0000000..64d834b --- /dev/null +++ b/semestr-3/pf/lista3/procc.mli @@ -0,0 +1,55 @@ +(* Ten plik, razem z plikiem proc.ml implementują prostą bibliotekę do + lekkich, kooperatywnych wątków. Aby używać tej biblioteki trzeba ją + najpierw skompilować za pomocą poleceń: + + $ ocamlc -c proc.mli + $ ocamlc -c proc.ml + + i ewentualnie, gdy ktoś chce z niej korzystać w programach kompilowanych + do kodu maszynowego: + + $ ocamlopt -c proc.ml + + Aby załadować bibliotekę do interpretera, przekaż odpowiedni plik cmo + jako argument interpretera w wierszu poleceń: + + $ utop proc.cmo + + Implementowane w niej funkcje są widoczne w module Proc: + + # Proc.run (Proc.send "ABC") ;; + ABC + - : unit = () + + Można też moduł Proc otworzyć: + + # open Proc ;; + # run (send "ABC") ;; + ABC + - : unit = () +*) + +(** Abstrakcyjny typ odpowiedzi *) +type ('z,'i,'o) ans + +(** Obliczenie w CPS-ie wewnątrz pojedynczego procesu. + Ma cztery parametry: + 'a - typ obliczenia (typ oczekiwany przez kontynuację) + 'z - typ zwracanej wartości przez cały proces + 'i - typ elementów strumienia wejściowego + 'o - typ elementów strumienia wyjściowego *) +type ('a,'z,'i,'o) proc = ('a -> ('z,'i,'o) ans) -> ('z,'i,'o) ans + +(** Wysyłanie pojedynczej wartości do strumienia wyjściowego *) +val send : 'o -> (unit,'z,'i,'o) proc + +(** Odebranie pojedynczej wartości ze strumienia wejściowego *) +val recv : ('i,'z,'i,'o) proc + +(** Zastępuje bieżący proces dwoma nowymi połączonymi ze sobą *) +val (<|>>) : ('z,'z,'i,'m) proc -> ('z,'z,'m,'o) proc -> ('a,'z,'i,'o) proc + +(** Uruchamia proces. Na wejściu znajdują się kolejne wiersze wejścia + standardowego, natomiast wysyłane napisy są przekazywane na wyjście + standardowe. *) +val run : ('a,'a,string,string) proc -> 'a -- cgit v1.2.3