Skip to content

Instantly share code, notes, and snippets.

@okram
Created September 29, 2020 19:59
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/6dad220fe3b7833ece7cb04ee93096b8 to your computer and use it in GitHub Desktop.
Save okram/6dad220fe3b7833ece7cb04ee93096b8 to your computer and use it in GitHub Desktop.
mmlang> :[model,mm] // the base model (int,bool,real,str,lst,rec)
......> [define,
......> vertex<=rec, // a vertex is a sort of record
......> vertex<=int-<('id'->_), // a vertex can be constructed from an int
......> edge<=rec, // an edge is a sort of record
......> edge<=(vertex;vertex)-<('source'->.0,'target'->.1)] // an edge can be constructed from a vertex x vertex pair
==>_[define,vertex<=rec,vertex<=int[split,('id'->int)],edge<=rec,edge<=(vertex;vertex)[split,('source'->vertex<=(vertex;vertex)[get,0,_],'target'->vertex<=(vertex;vertex)[get,1,_])]]
mmlang> 5 => vertex // morph 5 into a vertex
==>vertex:('id'->5)
mmlang> (5;6) => (vertex;vertex) // morph a pair of ints into a pair of vertices
==>(vertex:('id'->5);vertex:('id'->6))
mmlang> (5;6) => (vertex;vertex) => edge // morph int-pair to vertex-pair to an edge
==>edge:('source'->vertex:('id'->5),'target'->vertex:('id'->6))
mmlang> (5;6) => edge // morph an int-pair into an edge
==>edge:('source'->vertex:('id'->5),'target'->vertex:('id'->6)) // a search of the model's paths yield the shortest path from int-pair to edge
mmlang>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment