簡體   English   中英

OCaml 中的自動機

[英]automata in OCaml

我對 OCaml 有點陌生。 我想在 OCaml 中實現自動機的產品構造算法。 我很困惑如何在 OCaml 中表示自動機。 有人能幫我嗎?

有限確定性自動機的清晰表示是:

type ('state,'letter) automaton = {
  initial    : 'state ;
  final      : 'state -> bool ;
  transition : 'letter -> 'state -> 'state ;
}

例如,一個判斷一個單詞是否包含奇數個'a'的自動機可以表示為:

let odd = {
  initial    = `even ; 
  final      = (function `odd -> true | _ -> false) ;
  transition = (function 
    | 'a' -> (function `even -> `odd | `odd -> `even)
    |  _  -> (fun state -> state))
}

另一個例子是只接受字符串"bbb"的自動化(是的,這些來自 這個在線講義):

let bbb = {
  initial = `b0 ;
  final   = (function `b3 -> true | _ -> false) ;
  transition = (function 
    | 'b' -> (function `b0 -> `b1 | `b1 -> `b2 | `b2 -> `b3 | _ -> `fail)
    |  _  -> (fun _ -> `fail))
}

自動機乘積在數學上被描述為使用 state 集合的笛卡爾積作為新集合,以及最終函數和轉換函數在該集合上的自然擴展:

let product a b = {
  initial = (a.initial, b.initial) ;
  final   = (fun (x,y) -> a.final x && b.final y) ;
  transition = (fun c (x,y) -> (a.transition c x, b.transition c y)
}

該產品自動機計算兩種語言的交集。 你也可以使用|| 代替&&來實現兩種語言的聯合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM