[英]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.