Índice
-
- INF 5010: Otimização combinatória
- INF 5016: Algoritmos avançados
- INF 5023: Técnicas de busca heurística.
Esta é uma versão antiga do documento!
Uma introdução a OCaml de um dos autores.
(* categoria sintatica Num *)
type num = int;;
(* categoria sintatica Loc *)
type loc = string;;
(* categoria sintatica Bool: usamos bool *)
(* categoria sintatica AExpr *)
type aExpr = Num of num | Loc of loc
| Sum of aExpr * aExpr
| Diff of aExpr * aExpr
| Prod of aExpr * aExpr;;
(* categoria sintatica BExpr *)
type bExpr = Bool of bool
| Eq of aExpr * aExpr | Lt of aExpr * aExpr
| Not of bExpr
| And of bExpr * bExpr
| Or of bExpr * bExpr;;
(* categoria sintatica Com *)
type com = Skip
| Assign of loc * aExpr
| Seq of com * com
| Cond of bExpr * com * com
| While of bExpr * com
;;
(* o estado: uma função das locais para números inteiros *) type sigma = loc -> num;; (* o estado inicial *) let empty : sigma = function x -> 0;; (* um estado modificado em um ponto: sigma[l -> n] *) let mapsto f l n a = if a = l then n else f a;;
(* avaliação das expressões aritméticas *)
let rec eval_aExpr (a,sigma) =
match a with
Num n -> n
| Loc l -> sigma l
| Sum (a1,a2) -> (eval_aExpr (a1,sigma))+(eval_aExpr (a2,sigma))
| Diff (a1,a2) -> (eval_aExpr (a1,sigma))-(eval_aExpr (a2,sigma))
| Prod (a1,a2) -> (eval_aExpr (a1,sigma))*(eval_aExpr (a2,sigma))
;;