Skip to content

Commit

Permalink
added tables (maps/dicts)
Browse files Browse the repository at this point in the history
  • Loading branch information
mcsoto committed Jul 27, 2014
1 parent 2e3e6e5 commit 3b505aa
Show file tree
Hide file tree
Showing 9 changed files with 75 additions and 32 deletions.
1 change: 1 addition & 0 deletions src/core.pl
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@
:- ensure_loaded("math.pl").
:- ensure_loaded("io.pl").
:- ensure_loaded("logic.pl").
:- ensure_loaded("table.pl").

custom_var(Name, X) :- (write(Name), write(" = "), (logic_env(T),logic_toString(T,X,S), write(S))).
custom_vars(N,A) :- A = [] -> write("true") ;
Expand Down
23 changes: 16 additions & 7 deletions src/gen.cosmos
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ functor(Str, Functor)
functor(Id, Functor)
functor(ObjGet, Functor)
functor(Func, Functor)
functor(TList, Functor)
functor(TList, Functor Functor)
functor(TTable, Functor Functor)
functor(Op, Functor)

functor(Info, Functor Integer Integer)
Expand Down Expand Up @@ -428,6 +429,12 @@ rel extract_name(Functor f, String s2, env, env2, String prefix, String module)
extract_list(args,sargs,env,prefix)
s2=sargs

elseif(f=TTable(args))
env=env2
//extract_list(args,sargs,env,prefix)
gensym('T',s2)
prefix='new('+s2+'),'

elseif(f=Rel(args1,body1)) //anonymous relation
generate_lambda(s2,prefix,env_lambdas(env),module)
env_push_lambda(env, Rel('',args1,body1), env2)
Expand All @@ -443,7 +450,7 @@ rel extract_type(f,type,env)
elseif(f=Id(name, type_id))
if(type_id!=[]) //type annotation is not empty, this is a declaration
type_id=Cons(type_name, _)
if(list.has(['Any','Number','Integer','Real','Functor','Relation','String','Record','File'],type_name))
if(list.has(['Any','Number','Integer','Real','Functor','Relation','String','Table','File'],type_name))
type=type_id
else
logic.throw('"'+type_name+'" is not a type')
Expand All @@ -458,7 +465,7 @@ rel extract_type(f,type,env)
else
type=type_var
elseif(env_has_var(env,Lib(_, name))) //name of module
type=['Record']
type=['Table']
else //empty type annotation, use Any
type=['Any']
elseif(f=Func(name, args, info))
Expand Down Expand Up @@ -490,6 +497,8 @@ rel extract_type(f,type,env)
type=['Any']
elseif(f=TList(_))
type=['Functor']
elseif(f=TTable(_))
type=['Table']
else
type=['Any']

Expand Down Expand Up @@ -887,14 +896,14 @@ rel notblank(s)
s!=''

rel generate_chunk(Functor f, String code, String module, opts)
stdlibs = [Lib('list','list'),Lib('string','string'),Lib('math','math'),Lib('io','io'),Lib('logic','logic')]
stdlibs = [Lib('table','table'),Lib('list','list'),Lib('string','string'),Lib('math','math'),Lib('io','io'),Lib('logic','logic')]
stdvars = [Var('Some','local',['FunctorObject']),Var('None','local',['FunctorObject']),Var('Left','local',['FunctorObject']),Var('Right','local',['FunctorObject'])]
stdfcs = [Var('Some','',['Functor',['Any']]), Var('None','',['Functor',['Null']])]
if(list.has(opts, '--no-std-libs'))
env_init(env, stdvars, stdfcs, [])
else
env_init(env0, list.concat(stdlibs, stdvars), stdfcs, [])
extract_modules(env0, ['list','string','math','io','logic'], env)
extract_modules(env0, ['list','table','string','math','io','logic'], env)

generate_world(f, code_world, env, env2, module)
make_binds(env_vars(env2), 0, j, s, module)
Expand All @@ -905,8 +914,8 @@ rel generate_chunk(Functor f, String code, String module, opts)
code=info + ':- style_check([-singleton,-no_effect]), ensure_loaded("core.pl").\n' + list.join(l_lambdas,'') + code_world + code_env + '.'

rel generate_query(Functor f, String code, String prefix, Functor query_vars, module)
env_init(env_a, [Lib('list','list'),Lib('string','string'),Lib('math','math'),Lib('io','io'),Lib('logic','logic'),Var('Some','local',['FunctorObject']),Var('None','local',['FunctorObject']),Var('Left','local',['FunctorObject']),Var('Right','local',['FunctorObject'])], [Var('Some','',['Functor',['Any']]), Var('None','',['Functor',['Null']])], [])
extract_modules(env_a, ['list','string','math','io','logic'], env_b)
env_init(env_a, [Lib('list','list'),Lib('table','table'),Lib('string','string'),Lib('math','math'),Lib('io','io'),Lib('logic','logic'),Var('Some','local',['FunctorObject']),Var('None','local',['FunctorObject']),Var('Left','local',['FunctorObject']),Var('Right','local',['FunctorObject'])], [Var('Some','',['Functor',['Any']]), Var('None','',['Functor',['Null']])], [])
extract_modules(env_a, ['list','table','string','math','io','logic'], env_b)
if(module='temp')
env=env_b
else
Expand Down
36 changes: 18 additions & 18 deletions src/gen.pl

Large diffs are not rendered by default.

9 changes: 9 additions & 0 deletions src/parser.cosmos
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ functor(Id, Functor)
functor(ObjGet, Functor)
functor(Func, Functor)
functor(TList, Functor)
functor(TTable, Functor)

functor(Error, Functor)
functor(None, Functor)
Expand Down Expand Up @@ -151,6 +152,13 @@ rel parse_list(l,tail,f)
l3=Cons(Token(_,']',_),tail)
f=TList(args)

rel parse_table(l,tail,f)
l = Cons(Token(_,'{',_),l2)
//this.parse_args(l2,l3,args)
l2=l3
l3=Cons(Token(_,'}',_),tail)
f=TTable(args)

rel exp_to_functor(l,tail,f)
l=Cons(Token(a,'string',_), tail) and f=Str(a) or
l=Cons(Token(_,'-',_), Cons(Token(a,'number',_), tail)) and f=Num('-'+a) or
Expand All @@ -162,6 +170,7 @@ rel parse_exp2(l,tail,f)
parse_obj_get(l,tail,f) or
parse_exp_call(l,tail,f) or
parse_list(l,tail,f) or
parse_table(l,tail,f) or
parse_name(l,tail,type,name) and f=Id(name,type) or
parse_lambda(l,tail,f) or
exp_to_functor(l, tail,f)
Expand Down
7 changes: 4 additions & 3 deletions src/parser.pl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%parse_world Relation Any Any Any;parse_def Relation Any Any Any;parse_definition Relation Any Any Any;parse_fact Relation Any Any Any;parse_body Relation Any Any Any;parse_call Relation Any Any Any;parse_definition Relation;parse_if Relation Any Any Any;parse_elseifs Relation Any Any Any;parse_false Relation Any Any Any;parse_true Relation Any Any Any;parse_declaration Relation Any Any Any;parse_host Relation Any Any Any;parse_obj_pred Relation Any Any Any;parse_pred Relation Any Any Any;parse_inequality Relation Any Any Any;parse_neq Relation Any Any Any;parse_eq Relation Any Any Any;parse_exp Relation Any Any Any;parse_math0 Relation Any Any Any;parse_math1 Relation Any Any Any;parse_math2 Relation Any Any Any Any;parse_math0 Relation;parse_exp2 Relation Any Any Any;exp_to_functor Relation Any Any Any;parse_list Relation Any Any Any;parse_exp_call Relation Any Any Any;parse_obj_get Relation Any Any Any;parse_exp_obj_call Relation Any Any Any;parse_lambda Relation Any Any Any;parse_body Relation;parse_name Relation Any Any Any Any;name_list_to_type Relation Any Any;name_list_to_type2 Relation Any Any;parse_name2 Relation Any Any Any Any;parse_args Relation Any Any Any;parse_exp Relation;custom_throw Relation String Functor;get_info Relation Any Any;parse_string Relation Any Any Any;parse_type Relation Any Any Any;None FunctorObject;Error FunctorObject;TList FunctorObject;Func FunctorObject;ObjGet FunctorObject;Id FunctorObject;Str FunctorObject;Num FunctorObject;Fact FunctorObject;Rel FunctorObject;Declaration FunctorObject;Once FunctorObject;Host FunctorObject;RelOp FunctorObject;Op FunctorObject;SoftCut FunctorObject;Cond FunctorObject;If FunctorObject;ObjPred FunctorObject;Bracket FunctorObject;Or FunctorObject;And FunctorObject;Pred FunctorObject;False FunctorObject;True FunctorObject;Inequality FunctorObject;Neq FunctorObject;Eq FunctorObject;Info FunctorObject;Token FunctorObject;Cons FunctorObject
%parse_world Relation Any Any Any;parse_def Relation Any Any Any;parse_definition Relation Any Any Any;parse_fact Relation Any Any Any;parse_body Relation Any Any Any;parse_call Relation Any Any Any;parse_definition Relation;parse_if Relation Any Any Any;parse_elseifs Relation Any Any Any;parse_false Relation Any Any Any;parse_true Relation Any Any Any;parse_declaration Relation Any Any Any;parse_host Relation Any Any Any;parse_obj_pred Relation Any Any Any;parse_pred Relation Any Any Any;parse_inequality Relation Any Any Any;parse_neq Relation Any Any Any;parse_eq Relation Any Any Any;parse_exp Relation Any Any Any;parse_math0 Relation Any Any Any;parse_math1 Relation Any Any Any;parse_math2 Relation Any Any Any Any;parse_math0 Relation;parse_exp2 Relation Any Any Any;exp_to_functor Relation Any Any Any;parse_table Relation Any Any Any;parse_list Relation Any Any Any;parse_exp_call Relation Any Any Any;parse_obj_get Relation Any Any Any;parse_exp_obj_call Relation Any Any Any;parse_lambda Relation Any Any Any;parse_body Relation;parse_name Relation Any Any Any Any;name_list_to_type Relation Any Any;name_list_to_type2 Relation Any Any;parse_name2 Relation Any Any Any Any;parse_args Relation Any Any Any;parse_exp Relation;custom_throw Relation String Functor;get_info Relation Any Any;parse_string Relation Any Any Any;parse_type Relation Any Any Any;None FunctorObject;Error FunctorObject;TTable FunctorObject;TList FunctorObject;Func FunctorObject;ObjGet FunctorObject;Id FunctorObject;Str FunctorObject;Num FunctorObject;Fact FunctorObject;Rel FunctorObject;Declaration FunctorObject;Once FunctorObject;Host FunctorObject;RelOp FunctorObject;Op FunctorObject;SoftCut FunctorObject;Cond FunctorObject;If FunctorObject;ObjPred FunctorObject;Bracket FunctorObject;Or FunctorObject;And FunctorObject;Pred FunctorObject;False FunctorObject;True FunctorObject;Inequality FunctorObject;Neq FunctorObject;Eq FunctorObject;Info FunctorObject;Token FunctorObject;Cons FunctorObject
:- style_check([-singleton,-no_effect]), ensure_loaded("core.pl").
:- ensure_loaded("lexer.pl").
:- ensure_loaded("whitespacer.pl").
Expand All @@ -16,8 +16,9 @@
parser_parse_obj_get(Env0,_l,_tail,_f) :- eq(_l, '[|]'(fcToken(_a,"id",_), '[|]'(fcToken(_,".",_), '[|]'(fcToken(_b,"id",_),_tail)))),eq(_f,fcObjGet(_a,_b)).
parser_parse_exp_call(Env0,_l,_tail,_f) :- eq(_l, '[|]'(fcToken(_name,"id",_), '[|]'(fcToken(_,"(",_),_l2))),env_call(Env0,"parse_args",[Env0,_l2,_l3,_args]),eq(_l3, '[|]'(fcToken(_,")",_),_tail)),env_call(Env0,"get_info",[Env0,_l,T9]),eq(_f,fcFunc(_name,_args,T9)).
parser_parse_list(Env0,_l,_tail,_f) :- eq(_l, '[|]'(fcToken(_,"[",_),_l2)),env_call(Env0,"parse_args",[Env0,_l2,_l3,_args]),eq(_l3, '[|]'(fcToken(_,"]",_),_tail)),eq(_f,fcTList(_args)).
parser_parse_table(Env0,_l,_tail,_f) :- eq(_l, '[|]'(fcToken(_,"{",_),_l2)),eq(_l2,_l3),eq(_l3, '[|]'(fcToken(_,"}",_),_tail)),eq(_f,fcTTable(_args)).
parser_exp_to_functor(Env0,_l,_tail,_f) :- eq(_l, '[|]'(fcToken(_a,"string",_),_tail)),eq(_f,fcStr(_a));eq(_l, '[|]'(fcToken(_,"-",_), '[|]'(fcToken(_a,"number",_),_tail))),string_concat("-",_a,T10),eq(_f,fcNum(T10));eq(_l, '[|]'(fcToken(_a,"number",_),_tail)),eq(_f,fcNum(_a)).
parser_parse_exp2(Env0,_l,_tail,_f) :- env_call(Env0,"parse_exp_obj_call",[Env0,_l,_tail,_f]);env_call(Env0,"parse_obj_get",[Env0,_l,_tail,_f]);env_call(Env0,"parse_exp_call",[Env0,_l,_tail,_f]);env_call(Env0,"parse_list",[Env0,_l,_tail,_f]);env_call(Env0,"parse_name",[Env0,_l,_tail,_type,_name]),eq(_f,fcId(_name,_type));env_call(Env0,"parse_lambda",[Env0,_l,_tail,_f]);env_call(Env0,"exp_to_functor",[Env0,_l,_tail,_f]).
parser_parse_exp2(Env0,_l,_tail,_f) :- env_call(Env0,"parse_exp_obj_call",[Env0,_l,_tail,_f]);env_call(Env0,"parse_obj_get",[Env0,_l,_tail,_f]);env_call(Env0,"parse_exp_call",[Env0,_l,_tail,_f]);env_call(Env0,"parse_list",[Env0,_l,_tail,_f]);env_call(Env0,"parse_table",[Env0,_l,_tail,_f]);env_call(Env0,"parse_name",[Env0,_l,_tail,_type,_name]),eq(_f,fcId(_name,_type));env_call(Env0,"parse_lambda",[Env0,_l,_tail,_f]);env_call(Env0,"exp_to_functor",[Env0,_l,_tail,_f]).
parser_parse_math2(Env0,_l,_tail,_prev,_f) :- env_call(Env0,"parse_string",[Env0,_l,_l2,_op]),(((eq(_op,"+");eq(_op,"-");eq(_op,"*");eq(_op,"/")),(((env_call(Env0,"parse_string",[Env0,_l2,_l3,"("])),env_call(Env0,"parse_math0",[Env0,_l3,_l4,_b]),env_call(Env0,"parse_string",[Env0,_l4,_tail,")"]),env_call(Env0,"get_info",[Env0,_l,T11]),eq(_f,fcOp(_prev,_b,_op,T11)));(env_call(Env0,"parse_exp2",[Env0,_l2,_l4,_b]),env_call(Env0,"get_info",[Env0,_l,T12]),eq(_fcur,fcOp(_prev,_b,_op,T12)),env_call(Env0,"parse_math2",[Env0,_l4,_tail,_fcur,_fnext]),(((eq(_fnext,fcNone)),eq(_f,_fcur));(eq(_f,_fnext))))));(eq(_f,fcNone),eq(_tail,_l))).
parser_parse_math1(Env0,_l,_tail,_f) :- env_call(Env0,"parse_exp2",[Env0,_l,_l2,_a]),env_call(Env0,"parse_math2",[Env0,_l2,_tail,_a,_f2]),(((eq(_f2,fcNone)),eq(_f,_a));(eq(_f,_f2))).
parser_parse_math0(Env0,_l,_tail,_f) :- env_call(Env0,"parse_string",[Env0,_l,_l2,_s]),(((eq(_s,"(")),env_call(Env0,"parse_math0",[Env0,_l2,_l3,_f1]),env_call(Env0,"parse_string",[Env0,_l3,_l4,")"]),env_call(Env0,"parse_math2",[Env0,_l4,_tail,_f1,_f2]),(((eq(_f2,fcNone)),eq(_f,_f1));(eq(_f,_f2))));(env_call(Env0,"parse_math1",[Env0,_l,_tail,_f]))).
Expand All @@ -39,4 +40,4 @@
parser_parse_definition(Env0,_l,_tail,_f) :- eq(_l, '[|]'(fcToken(_,"rel",_), '[|]'(fcToken(_name,"id",_), '[|]'(fcToken(_,"(",_),_l2)))),env_call(Env0,"parse_args",[Env0,_l2,_l3,_args]),eq(_l3, '[|]'(fcToken(_,")",_),_l4)),env_call(Env0,"parse_body",[Env0,_l4,_l5,_body]),eq(_l5, '[|]'(fcToken(_,";",_),_tail)),eq(_f,fcRel(_name,_args,_body)).
parser_parse_def(Env0,_l,_tail,_f) :- env_call(Env0,"parse_eq",[Env0,_l,_tail,_f]);env_call(Env0,"parse_definition",[Env0,_l,_tail,_f]);env_call(Env0,"parse_fact",[Env0,_l,_tail,_f]);env_call(Env0,"parse_declaration",[Env0,_l,_tail,_f]).
parser_parse_world(Env0,_l,_tail,_f) :- (((env_call(Env0,"parse_def",[Env0,_l,_l2,_a])),(((eq(_l2, '[|]'(fcToken(_conn,"connective",_),_l3))),env_call(Env0,"parse_world",[Env0,_l3,_tail,_b]),eq(_f,fcAnd(_a,_b)));(eq(_l2,_tail),eq(_f,_a))));(env_call(Env0,"get_info",[Env0,_l,T18]),env_call(Env0,"custom_throw",[Env0,"cannot parse definition from this point",T18]))).
parser_env(X) :- new(X0),set(X0,"parse_world",parser_parse_world,X1),set(X1,"parse_def",parser_parse_def,X2),set(X2,"parse_definition",parser_parse_definition,X3),set(X3,"parse_fact",parser_parse_fact,X4),set(X4,"parse_body",parser_parse_body,X5),set(X5,"parse_call",parser_parse_call,X6),set(X6,"parse_definition",parser_parse_definition,X7),set(X7,"parse_if",parser_parse_if,X8),set(X8,"parse_elseifs",parser_parse_elseifs,X9),set(X9,"parse_false",parser_parse_false,X10),set(X10,"parse_true",parser_parse_true,X11),set(X11,"parse_declaration",parser_parse_declaration,X12),set(X12,"parse_host",parser_parse_host,X13),set(X13,"parse_obj_pred",parser_parse_obj_pred,X14),set(X14,"parse_pred",parser_parse_pred,X15),set(X15,"parse_inequality",parser_parse_inequality,X16),set(X16,"parse_neq",parser_parse_neq,X17),set(X17,"parse_eq",parser_parse_eq,X18),set(X18,"parse_exp",parser_parse_exp,X19),set(X19,"parse_math0",parser_parse_math0,X20),set(X20,"parse_math1",parser_parse_math1,X21),set(X21,"parse_math2",parser_parse_math2,X22),set(X22,"parse_math0",parser_parse_math0,X23),set(X23,"parse_exp2",parser_parse_exp2,X24),set(X24,"exp_to_functor",parser_exp_to_functor,X25),set(X25,"parse_list",parser_parse_list,X26),set(X26,"parse_exp_call",parser_parse_exp_call,X27),set(X27,"parse_obj_get",parser_parse_obj_get,X28),set(X28,"parse_exp_obj_call",parser_parse_exp_obj_call,X29),set(X29,"parse_lambda",parser_parse_lambda,X30),set(X30,"parse_body",parser_parse_body,X31),set(X31,"parse_name",parser_parse_name,X32),set(X32,"name_list_to_type",parser_name_list_to_type,X33),set(X33,"name_list_to_type2",parser_name_list_to_type2,X34),set(X34,"parse_name2",parser_parse_name2,X35),set(X35,"parse_args",parser_parse_args,X36),set(X36,"parse_exp",parser_parse_exp,X37),set(X37,"custom_throw",parser_custom_throw,X38),set(X38,"get_info",parser_get_info,X39),set(X39,"parse_string",parser_parse_string,X40),set(X40,"parse_type",parser_parse_type,X41),whitespacer_env(Y41),set(X41,"whitespacer",Y41,X42),lexer_env(Y42),set(X42,"lexer",Y42,X43),set(X43,"None",parser_None,X44),set(X44,"Error",parser_Error,X45),set(X45,"TList",parser_TList,X46),set(X46,"Func",parser_Func,X47),set(X47,"ObjGet",parser_ObjGet,X48),set(X48,"Id",parser_Id,X49),set(X49,"Str",parser_Str,X50),set(X50,"Num",parser_Num,X51),set(X51,"Fact",parser_Fact,X52),set(X52,"Rel",parser_Rel,X53),set(X53,"Declaration",parser_Declaration,X54),set(X54,"Once",parser_Once,X55),set(X55,"Host",parser_Host,X56),set(X56,"RelOp",parser_RelOp,X57),set(X57,"Op",parser_Op,X58),set(X58,"SoftCut",parser_SoftCut,X59),set(X59,"Cond",parser_Cond,X60),set(X60,"If",parser_If,X61),set(X61,"ObjPred",parser_ObjPred,X62),set(X62,"Bracket",parser_Bracket,X63),set(X63,"Or",parser_Or,X64),set(X64,"And",parser_And,X65),set(X65,"Pred",parser_Pred,X66),set(X66,"False",parser_False,X67),set(X67,"True",parser_True,X68),set(X68,"Inequality",parser_Inequality,X69),set(X69,"Neq",parser_Neq,X70),set(X70,"Eq",parser_Eq,X71),set(X71,"Info",parser_Info,X72),set(X72,"Token",parser_Token,X73),set(X73,"Cons",parser_Cons,X74),list_env(Y74),set(X74,"list",Y74,X75),string_env(Y75),set(X75,"string",Y75,X76),math_env(Y76),set(X76,"math",Y76,X77),io_env(Y77),set(X77,"io",Y77,X78),logic_env(Y78),set(X78,"logic",Y78,X79),set(X79,"Some",parser_Some,X80),set(X80,"None",parser_None,X81),set(X81,"Left",parser_Left,X82),set(X82,"Right",parser_Right,X83),X=X83.
parser_env(X) :- new(X0),set(X0,"parse_world",parser_parse_world,X1),set(X1,"parse_def",parser_parse_def,X2),set(X2,"parse_definition",parser_parse_definition,X3),set(X3,"parse_fact",parser_parse_fact,X4),set(X4,"parse_body",parser_parse_body,X5),set(X5,"parse_call",parser_parse_call,X6),set(X6,"parse_definition",parser_parse_definition,X7),set(X7,"parse_if",parser_parse_if,X8),set(X8,"parse_elseifs",parser_parse_elseifs,X9),set(X9,"parse_false",parser_parse_false,X10),set(X10,"parse_true",parser_parse_true,X11),set(X11,"parse_declaration",parser_parse_declaration,X12),set(X12,"parse_host",parser_parse_host,X13),set(X13,"parse_obj_pred",parser_parse_obj_pred,X14),set(X14,"parse_pred",parser_parse_pred,X15),set(X15,"parse_inequality",parser_parse_inequality,X16),set(X16,"parse_neq",parser_parse_neq,X17),set(X17,"parse_eq",parser_parse_eq,X18),set(X18,"parse_exp",parser_parse_exp,X19),set(X19,"parse_math0",parser_parse_math0,X20),set(X20,"parse_math1",parser_parse_math1,X21),set(X21,"parse_math2",parser_parse_math2,X22),set(X22,"parse_math0",parser_parse_math0,X23),set(X23,"parse_exp2",parser_parse_exp2,X24),set(X24,"exp_to_functor",parser_exp_to_functor,X25),set(X25,"parse_table",parser_parse_table,X26),set(X26,"parse_list",parser_parse_list,X27),set(X27,"parse_exp_call",parser_parse_exp_call,X28),set(X28,"parse_obj_get",parser_parse_obj_get,X29),set(X29,"parse_exp_obj_call",parser_parse_exp_obj_call,X30),set(X30,"parse_lambda",parser_parse_lambda,X31),set(X31,"parse_body",parser_parse_body,X32),set(X32,"parse_name",parser_parse_name,X33),set(X33,"name_list_to_type",parser_name_list_to_type,X34),set(X34,"name_list_to_type2",parser_name_list_to_type2,X35),set(X35,"parse_name2",parser_parse_name2,X36),set(X36,"parse_args",parser_parse_args,X37),set(X37,"parse_exp",parser_parse_exp,X38),set(X38,"custom_throw",parser_custom_throw,X39),set(X39,"get_info",parser_get_info,X40),set(X40,"parse_string",parser_parse_string,X41),set(X41,"parse_type",parser_parse_type,X42),whitespacer_env(Y42),set(X42,"whitespacer",Y42,X43),lexer_env(Y43),set(X43,"lexer",Y43,X44),set(X44,"None",parser_None,X45),set(X45,"Error",parser_Error,X46),set(X46,"TTable",parser_TTable,X47),set(X47,"TList",parser_TList,X48),set(X48,"Func",parser_Func,X49),set(X49,"ObjGet",parser_ObjGet,X50),set(X50,"Id",parser_Id,X51),set(X51,"Str",parser_Str,X52),set(X52,"Num",parser_Num,X53),set(X53,"Fact",parser_Fact,X54),set(X54,"Rel",parser_Rel,X55),set(X55,"Declaration",parser_Declaration,X56),set(X56,"Once",parser_Once,X57),set(X57,"Host",parser_Host,X58),set(X58,"RelOp",parser_RelOp,X59),set(X59,"Op",parser_Op,X60),set(X60,"SoftCut",parser_SoftCut,X61),set(X61,"Cond",parser_Cond,X62),set(X62,"If",parser_If,X63),set(X63,"ObjPred",parser_ObjPred,X64),set(X64,"Bracket",parser_Bracket,X65),set(X65,"Or",parser_Or,X66),set(X66,"And",parser_And,X67),set(X67,"Pred",parser_Pred,X68),set(X68,"False",parser_False,X69),set(X69,"True",parser_True,X70),set(X70,"Inequality",parser_Inequality,X71),set(X71,"Neq",parser_Neq,X72),set(X72,"Eq",parser_Eq,X73),set(X73,"Info",parser_Info,X74),set(X74,"Token",parser_Token,X75),set(X75,"Cons",parser_Cons,X76),list_env(Y76),set(X76,"list",Y76,X77),string_env(Y77),set(X77,"string",Y77,X78),math_env(Y78),set(X78,"math",Y78,X79),io_env(Y79),set(X79,"io",Y79,X80),logic_env(Y80),set(X80,"logic",Y80,X81),set(X81,"Some",parser_Some,X82),set(X82,"None",parser_None,X83),set(X83,"Left",parser_Left,X84),set(X84,"Right",parser_Right,X85),X=X85.
12 changes: 12 additions & 0 deletions src/table.cosmos
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
rel get(Table t, Any i, Table t2)
pl::get(t,x,t2)

rel set(Table t, Any i, Any x, Table t2)
pl::set(t,i,x,t2)

rel toListKeys(Table t, Functor l)
pl::assoc_to_keys(t, l)

rel toListValues(Table t, Functor l)
pl::assoc_to_values(t, l)

Loading

0 comments on commit 3b505aa

Please sign in to comment.