This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Useful type aliases | |
type Actor = MailboxProcessor<obj> | |
type Ident = string | |
type Cond = Actor | |
type Env = Actor | |
let (<!>) (actor : Actor) (msg : 'T) = actor.Post msg | |
// run forever - template |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let char c (s : string) = seq { if s.Length > 0 && s.[0] = c then yield s.Substring(1) } | |
let (=>) l r s = seq { for sl in l s do for sr in r sl -> sr } | |
let (<|>) l r s = seq { yield! l s; yield! r s } | |
let rec (<*>) e s = seq { yield s; yield! (e => (<*>) e) s } | |
let (<+>) e = e => (<*>) e |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Norvig's Spelling Corrector: http://norvig.com/spell-correct.html | |
open System.IO open System.Text.RegularExpressions | |
let edits1 (word : string) = | |
let splits = [for i in 0 .. word.Length do yield (word.[0..i-1], word.[i..])] | |
let deletes = [for a, b in splits do if b <> "" then yield a + b.[1..]] | |
let transposes = [for a, b in splits do if b.Length > 1 then yield a + string b.[1] + string b.[0] + b.[2..]] | |
let replaces = [for a, b in splits do for c in 'a'..'z' do if b <> "" then yield a + string c + b.[1..]] | |
let inserts = [for a, b in splits do for c in 'a'..'z' do yield a + string c + b] | |
deletes @ transposes @ replaces @ inserts |> Set.ofList |
NewerOlder