FunAlg - home
FunAlg to prosty polimorficzny jezyk funkcyjny z algebraicznymi strukturami danych.
Podstawowym celem przy jego tworzeniu byla przejrzysta i czytelna semantyka, oraz dobrze oddajaca ja skladnia.
Jezyk charakteryzuje sie nastepujacymi wlasnosciami:
- pelna funkcyjnosc - lambda abstrakcja, czesciowa aplikacja,
- zachlanna ewaluacja argumentow funkcji,
- silne typowanie,
- explicite definiowany polimorfizm,
- wbudowany garbage-collector,
- wbudowane typy podstawowe:
int
, str
, ...,
- typy algebraiczne, oraz ich konstruktory jako funkcje,
- definicje poprzez wlasnosc uniwersalna algebr poczatkowych:
match ... with ...
,
- wsparcie denotacji produktu:
let (_, (a, _), b) = triple in ...
,
- ulatwiona notacja wyrazen arymetycznych:
2 * 3/4 + 1/5 = 17/10
,
- rekurencja poprzez operator punktu stalego,
- wsparcie rekursji ogonowej,
- wbudowane porownywanie wartosci dowolnego typu,
- przerywanie pracy programu w przypadku wyjatku:
raise [int] "Dzielenie przez zero"
.
Przykladowy kod:
type list [a] =
| Nil : unit
| Cons : a * list [a];;
let rec length [a] : list [a] => int =
fun l : list [a] ->
match l with
| Nil _ -> 0
| Cons (_, t) -> inc (length t);;
let rec integers : int => list [int] =
fun i : int ->
if i = 0 then
Nil [int] ()
else
Cons [int] (i, integers (dec i));;
let ten = length [int] (integers 10);;
Oczywiscie w ramach projektu tworzony jest interpreter jezyka, dostepny w dziale download
.