load stdlib on startup added - init version
This commit is contained in:
parent
4bc784ba80
commit
140abbccd4
65
ml.cpp
65
ml.cpp
|
|
@ -1004,8 +1004,8 @@ namespace builtin {
|
||||||
// Evaluate a block of expressions in the current environment (SPECIAL FORM)
|
// Evaluate a block of expressions in the current environment (SPECIAL FORM)
|
||||||
MlValue do_block(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue do_block(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
MlValue acc;
|
MlValue acc;
|
||||||
for (size_t i = 0; i < args.size(); i++)
|
for (auto & arg : args)
|
||||||
acc = args[i].eval(env);
|
acc = arg.eval(env);
|
||||||
return acc;
|
return acc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1013,16 +1013,16 @@ namespace builtin {
|
||||||
MlValue scope(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue scope(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
MlEnvironment e = env;
|
MlEnvironment e = env;
|
||||||
MlValue acc;
|
MlValue acc;
|
||||||
for (size_t i = 0; i < args.size(); i++)
|
for (auto & arg : args)
|
||||||
acc = args[i].eval(e);
|
acc = arg.eval(e);
|
||||||
return acc;
|
return acc;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Quote an expression (SPECIAL FORM)
|
// Quote an expression (SPECIAL FORM)
|
||||||
MlValue quote(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue quote(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
std::vector<MlValue> v;
|
std::vector<MlValue> v;
|
||||||
for (size_t i = 0; i < args.size(); i++)
|
for (const auto & arg : args)
|
||||||
v.push_back(args[i]);
|
v.push_back(arg);
|
||||||
return MlValue(v);
|
return MlValue(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1039,7 +1039,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Print several values and return the last one
|
// Print several values and return the last one
|
||||||
MlValue print(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue print(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() < 1)
|
if (args.size() < 1)
|
||||||
|
|
@ -1058,7 +1057,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Get user input with an optional prompt
|
// Get user input with an optional prompt
|
||||||
MlValue input(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue input(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() > 1)
|
if (args.size() > 1)
|
||||||
|
|
@ -1074,7 +1072,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Get a random number between two numbers inclusively
|
// Get a random number between two numbers inclusively
|
||||||
MlValue random(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue random(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 2)
|
if (args.size() != 2)
|
||||||
|
|
@ -1102,7 +1099,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Get the contents of a file
|
// Get the contents of a file
|
||||||
MlValue read_file(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue read_file(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 1)
|
if (args.size() != 1)
|
||||||
|
|
@ -1113,7 +1109,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Write a string to a file
|
// Write a string to a file
|
||||||
MlValue write_file(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue write_file(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 2)
|
if (args.size() != 2)
|
||||||
|
|
@ -1130,7 +1125,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Read URL to (code content)
|
// Read URL to (code content)
|
||||||
MlValue read_url(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue read_url(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
// PERF optimize it for memory usage and performance
|
// PERF optimize it for memory usage and performance
|
||||||
|
|
@ -1237,7 +1231,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Evaluate a value as code
|
// Evaluate a value as code
|
||||||
MlValue eval(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue eval(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 1)
|
if (args.size() != 1)
|
||||||
|
|
@ -1247,7 +1240,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Create a list of values
|
// Create a list of values
|
||||||
MlValue list(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue list(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
return MlValue(args);
|
return MlValue(args);
|
||||||
|
|
@ -1255,7 +1247,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Sum multiple values
|
// Sum multiple values
|
||||||
MlValue sum(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue sum(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() < 2)
|
if (args.size() < 2)
|
||||||
|
|
@ -1269,7 +1260,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Subtract two values
|
// Subtract two values
|
||||||
MlValue subtract(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue subtract(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 2)
|
if (args.size() != 2)
|
||||||
|
|
@ -1279,7 +1269,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Multiply several values
|
// Multiply several values
|
||||||
MlValue product(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue product(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() < 2)
|
if (args.size() < 2)
|
||||||
|
|
@ -1293,7 +1282,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Divide two values
|
// Divide two values
|
||||||
MlValue divide(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue divide(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 2)
|
if (args.size() != 2)
|
||||||
|
|
@ -1303,7 +1291,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Get the remainder of values
|
// Get the remainder of values
|
||||||
MlValue remainder(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue remainder(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 2)
|
if (args.size() != 2)
|
||||||
|
|
@ -1313,7 +1300,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Are two values equal?
|
// Are two values equal?
|
||||||
MlValue eq(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue eq(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 2)
|
if (args.size() != 2)
|
||||||
|
|
@ -1323,7 +1309,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Are two values not equal?
|
// Are two values not equal?
|
||||||
MlValue neq(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue neq(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 2)
|
if (args.size() != 2)
|
||||||
|
|
@ -1333,7 +1318,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Is one number greater than another?
|
// Is one number greater than another?
|
||||||
MlValue greater(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue greater(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 2)
|
if (args.size() != 2)
|
||||||
|
|
@ -1343,7 +1327,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Is one number less than another?
|
// Is one number less than another?
|
||||||
MlValue less(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue less(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 2)
|
if (args.size() != 2)
|
||||||
|
|
@ -1353,7 +1336,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Is one number greater than or equal to another?
|
// Is one number greater than or equal to another?
|
||||||
MlValue greater_eq(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue greater_eq(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 2)
|
if (args.size() != 2)
|
||||||
|
|
@ -1363,7 +1345,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Is one number less than or equal to another?
|
// Is one number less than or equal to another?
|
||||||
MlValue less_eq(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue less_eq(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 2)
|
if (args.size() != 2)
|
||||||
|
|
@ -1373,7 +1354,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Get the type name of a value
|
// Get the type name of a value
|
||||||
MlValue get_type_name(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue get_type_name(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 1)
|
if (args.size() != 1)
|
||||||
|
|
@ -1384,7 +1364,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Cast an item to a float
|
// Cast an item to a float
|
||||||
MlValue cast_to_float(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue cast_to_float(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 1)
|
if (args.size() != 1)
|
||||||
|
|
@ -1394,7 +1373,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Cast an item to an int
|
// Cast an item to an int
|
||||||
MlValue cast_to_int(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue cast_to_int(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 1)
|
if (args.size() != 1)
|
||||||
|
|
@ -1404,7 +1382,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Index a list
|
// Index a list
|
||||||
MlValue index(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue index(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 2)
|
if (args.size() != 2)
|
||||||
|
|
@ -1420,7 +1397,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Insert a value into a list
|
// Insert a value into a list
|
||||||
MlValue insert(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue insert(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 3)
|
if (args.size() != 3)
|
||||||
|
|
@ -1437,7 +1413,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Remove a value at an index from a list
|
// Remove a value at an index from a list
|
||||||
MlValue remove(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue remove(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 2)
|
if (args.size() != 2)
|
||||||
|
|
@ -1454,7 +1429,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Get the length of a list
|
// Get the length of a list
|
||||||
MlValue len(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue len(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 1)
|
if (args.size() != 1)
|
||||||
|
|
@ -1467,7 +1441,6 @@ namespace builtin {
|
||||||
|
|
||||||
// Add an item to the end of a list
|
// Add an item to the end of a list
|
||||||
MlValue push(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue push(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() == 0)
|
if (args.size() == 0)
|
||||||
|
|
@ -1478,7 +1451,6 @@ namespace builtin {
|
||||||
}
|
}
|
||||||
|
|
||||||
MlValue pop(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue pop(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 1)
|
if (args.size() != 1)
|
||||||
|
|
@ -1487,7 +1459,6 @@ namespace builtin {
|
||||||
}
|
}
|
||||||
|
|
||||||
MlValue head(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue head(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 1)
|
if (args.size() != 1)
|
||||||
|
|
@ -1500,7 +1471,6 @@ namespace builtin {
|
||||||
}
|
}
|
||||||
|
|
||||||
MlValue tail(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue tail(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 1)
|
if (args.size() != 1)
|
||||||
|
|
@ -1515,7 +1485,6 @@ namespace builtin {
|
||||||
}
|
}
|
||||||
|
|
||||||
MlValue parse(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue parse(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 1)
|
if (args.size() != 1)
|
||||||
|
|
@ -1531,7 +1500,6 @@ namespace builtin {
|
||||||
}
|
}
|
||||||
|
|
||||||
MlValue replace(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue replace(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 3)
|
if (args.size() != 3)
|
||||||
|
|
@ -1543,7 +1511,6 @@ namespace builtin {
|
||||||
}
|
}
|
||||||
|
|
||||||
MlValue display(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue display(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 1)
|
if (args.size() != 1)
|
||||||
|
|
@ -1553,7 +1520,6 @@ namespace builtin {
|
||||||
}
|
}
|
||||||
|
|
||||||
MlValue debug(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue debug(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
if (args.size() != 1)
|
if (args.size() != 1)
|
||||||
|
|
@ -1563,7 +1529,6 @@ namespace builtin {
|
||||||
}
|
}
|
||||||
|
|
||||||
MlValue map_list(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue map_list(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
std::vector<MlValue> result, l = args[1].as_list(), tmp;
|
std::vector<MlValue> result, l = args[1].as_list(), tmp;
|
||||||
|
|
@ -1575,8 +1540,9 @@ namespace builtin {
|
||||||
return MlValue(result);
|
return MlValue(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//>>> (filter (lambda (x) (> x 2)) '(1 2 3 4 5))
|
||||||
|
// => (3 4 5)
|
||||||
MlValue filter_list(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue filter_list(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
std::vector<MlValue> result, l = args[1].as_list(), tmp;
|
std::vector<MlValue> result, l = args[1].as_list(), tmp;
|
||||||
|
|
@ -1590,7 +1556,6 @@ namespace builtin {
|
||||||
}
|
}
|
||||||
|
|
||||||
MlValue reduce_list(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue reduce_list(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
std::vector<MlValue> l = args[2].as_list(), tmp;
|
std::vector<MlValue> l = args[2].as_list(), tmp;
|
||||||
|
|
@ -1605,7 +1570,6 @@ namespace builtin {
|
||||||
}
|
}
|
||||||
|
|
||||||
MlValue range(std::vector<MlValue> args, MlEnvironment &env) {
|
MlValue range(std::vector<MlValue> args, MlEnvironment &env) {
|
||||||
// Is not a special form, so we can evaluate our args.
|
|
||||||
eval_args(args, env);
|
eval_args(args, env);
|
||||||
|
|
||||||
std::vector<MlValue> result;
|
std::vector<MlValue> result;
|
||||||
|
|
@ -1768,6 +1732,16 @@ MlValue MlEnvironment::get(const std::string& name) const {
|
||||||
throw MlError(MlValue::atom(name), *this, ATOM_NOT_DEFINED);
|
throw MlError(MlValue::atom(name), *this, ATOM_NOT_DEFINED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// load lisp std library
|
||||||
|
void load_std_lib(MlEnvironment &env) {
|
||||||
|
// TODO iterate through dir with files
|
||||||
|
std::string filename = "stdlib/stdlib.lisp";
|
||||||
|
|
||||||
|
MlEnvironment e;
|
||||||
|
MlValue result = run(read_file_contents(filename), e);
|
||||||
|
env.combine(e);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, const char **argv) {
|
int main(int argc, const char **argv) {
|
||||||
MlEnvironment env;
|
MlEnvironment env;
|
||||||
std::vector<MlValue> args;
|
std::vector<MlValue> args;
|
||||||
|
|
@ -1778,6 +1752,9 @@ int main(int argc, const char **argv) {
|
||||||
#ifdef USE_STD
|
#ifdef USE_STD
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
try {
|
try {
|
||||||
|
// Load std library
|
||||||
|
load_std_lib(env);
|
||||||
|
|
||||||
if (argc == 1 || (argc == 2 && std::string(argv[1]) == "-i"))
|
if (argc == 1 || (argc == 2 && std::string(argv[1]) == "-i"))
|
||||||
repl(env);
|
repl(env);
|
||||||
else if (argc == 3 && std::string(argv[1]) == "-c")
|
else if (argc == 3 && std::string(argv[1]) == "-c")
|
||||||
|
|
|
||||||
|
|
@ -29,4 +29,14 @@
|
||||||
; is a number negative?
|
; is a number negative?
|
||||||
(defun is-neg? (n) (< n 0))
|
(defun is-neg? (n) (< n 0))
|
||||||
|
|
||||||
|
; return second element of list
|
||||||
|
(defun second (l) (index l 1))
|
||||||
|
|
||||||
|
; return third element of list
|
||||||
|
(defun third (l) (index l 2))
|
||||||
|
|
||||||
|
; return fourth element of list
|
||||||
|
(defun fourth (l) (index l 3))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue