Skip to content

mintyfresh/markov

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 

markov DUB DUB

A simple library that provides templated types for markov chains.

Usage

import std.stdio;

import markov;

void main()
{
    // Build states for 1, 2, and 3 leading elements.
    auto chain = MarkovChain!string(1, 2, 3);

    chain.train("foo", "bar", "foo");
    chain.train("bar", "foo", "bar");

    chain.seed("foo");

    foreach(i; 0 .. 10)
    {
        // bar foo bar foo bar . . .
        writeln(chain.generate);
    }
}

Serialization

Simple functions for serializing markov chains into JSON and binary are included.

void main()
{
    // . . .

    // Serialize the markov chain into JSON.
    string json = chain.encodeJSON;

    // Serialize the markov chain into a binary format.
    ubyte[] binary = chain.encodeBinary;

    // Unserialize the JSON-encoded markov chain.
    MarkovChain!string decoded1 = json.decodeJSON!string;

    // Unserialize the binary-encoded markov chain.
    MarkovChain!string decoded2 = binary.decodeBinary!string;
}

In addition, helpers to store encoded data in files are also present.

void main()
{
    // . . .

    // Write a markov chain to a file.
    chain.encodeJSON(File("markov", "w"));

    // Read a markov chain from a file.
    MarkovChain!string decoded = File("markov", "r").decodeJSON!string;
}

License

MIT