Skip to content

Instantly share code, notes, and snippets.

@okram
Last active September 8, 2020 07:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save okram/a200d204a1ec1f3737e17ba86666c697 to your computer and use it in GitHub Desktop.
Save okram/a200d204a1ec1f3737e17ba86666c697 to your computer and use it in GitHub Desktop.
/* MODEL: digraph (extends numbers and mm)
digraph:(
'type' -> (
vertex -> (vertex:('id'->nat,'attrs'->attr{*}),
vertex<=nat-<('id'->nat),
vertex<=(nat;attr)=(_)-<('id'->.0,'attrs'->.1),
vertex<=int[is<0]-<([neg];('no';'data'))),
attr -> (attr:('key'->_,'value'->_),
attr<=(str;_)-<('key'->.0,'value'->.1)),
edge -> (edge:(outV->vertex,inV->vertex))
)) <= numbers
numbers:('type' -> (nat -> (nat<=int[is>0]))) <= mm
*/
_____ _______
/\ | __ |__ __|
_ __ ___ _ __ ___ _____ / \ | | | | | |
| '_ ` _ \| '_ ` _ |_____/ /\ \| | | | | |
| | | | | | | | | | | / ____ \ |__| | | |
|_| |_| |_|_| |_| |_| /_/ \_\____/ |_|
mm-adt.org
mmlang> :[model,digraph]
==>_
mmlang> ('name';'marko') => attr
==>attr:('key'->'name','value'->'marko')
mmlang> (32;('name';'marko')) => (int;attr)
==>(32;attr:('key'->'name','value'->'marko'))
mmlang> (32;('name';'marko')) => (int;attr) => vertex
==>vertex:('id'->nat:32,'attrs'->attr:('key'->'name','value'->'marko'))
mmlang> (32;('name';'marko')) => vertex // don't specify intermediate type
==>vertex:('id'->nat:32,'attrs'->attr:('key'->'name','value'->'marko'))
mmlang> 23 => vertex
==>vertex:('id'->nat:23)
mmlang> -23 => vertex // -23 is not a nat
==>vertex:('id'->nat:23,'attrs'->attr:('key'->'no','value'->'data'))
mmlang>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment