FunAlg - dodatkowe informacje

Extras

W folderze extra/ umieszczone sa dodatkowe pliki, przydatne przy korzystaniu z FunAlga.

Znajdziesz tam:

Polimorfizm

W FunAlgu polimorfizm jest definiowany jawnie, poprzez odpowiednie konstrukcje syntaktyczne. Wydluza to kod, ale upraszcza semantyke denotacyjna jezyka i pozwala na wieksza kontrole nad programem.

OCaml natomiast samodzielnie znajduje argumenty polimorficzne i szuka najbardziej ogolnego typu danego wyrazenia. Dzieki temu funkcje OCamla sa bardziej zwiezle. Jednak jak sie okazuje, algorytm nie jest perfekcyjny, co pokazuje ponizszy kod:


type t =
  | MyInt of int
  | MyFloat of float
  | MyString of string;;

let foo printerf value =
  match value with
  | MyInt i -> printerf string_of_int i
  | MyFloat x -> printerf string_of_float x
  | MyString s -> printerf (fun x -> x) s;;

# type t = MyInt of int | MyFloat of float | MyString of string
#         Characters 95-110:
  | MyFloat x -> printerf string_of_float x
                          ^^^^^^^^^^^^^^^
This expression has type float -> string but is here used with type int -> string

Syntax

Definiujac skladnie jezyka, korzystam z notacji BNF:

Logo

LOGO

Logo projektu FunAlg, (w teorii) przedstawia Y λ, czyli aplikacje operatora Y, do lambdy - funkcji.