Consistent overhead byte stuffing: Difference between revisions
Content added Content deleted
(→C: state authorship) |
|||
Line 103: | Line 103: | ||
let encode g=seq{yield! fN(seq{yield! g; yield 0uy}); yield 0uy} |
let encode g=seq{yield! fN(seq{yield! g; yield 0uy}); yield 0uy} |
||
let rec fT g=seq{match Seq.head g with 0uy->() |n->yield 0uy; yield! g|>Seq.take(int n)|>Seq.skip 1; yield! fT(g|>Seq.skip(int n))} |
let rec fT g=seq{match Seq.head g with 0uy->() |n->yield 0uy; yield! g|>Seq.take(int n)|>Seq.skip 1; yield! fT(g|>Seq.skip(int n))} |
||
let fI n=if n then seq[0uy] else Seq.empty |
|||
let |
let rec fG n g=seq{match Seq.head g with 0uy->() |255uy->yield! fI n; yield! (g|>Seq.take 255|>Seq.skip 1); yield! fG false (g|>Seq.skip 255) |
||
|i->yield! fI n; yield! g|>Seq.take(int i)|>Seq.skip 1; yield! fG true (g|>Seq.skip(int i))} |
|||
let decode g=seq{yield! fG false g} |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||
===Tests=== |
===Tests=== |
||
<syntaxhighlight lang="fsharp"> |
<syntaxhighlight lang="fsharp"> |