Í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 Ident *) type ident = string;; (* categoria sintatica Bool: usamos bool *) (* categoria sintatica AExpr *) type aExpr = Num of num | Ident of ident | 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 ident * aExpr | Seq of com * com | Cond of bExpr * com * com | While of bExpr * com ;;
(* o estado: uma função das identificadores para números inteiros *) type sigma = ident -> 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
| Ident x -> sigma x
| 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))
;;