diff --git a/src/main.cpp b/src/main.cpp index c1fb578..f9cfe84 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -41,6 +41,7 @@ std::ostream& help(std::ostream& out) { << "option:\n" << " -h, --help | get help.\n" << " -v, --version | get version.\n" + << " -r, --repl | use repl interpreter(experimental).\n" << "\nnasal [option] [argv]\n" << "option:\n" << " -a, --ast | view ast after link/optimize process.\n" @@ -54,7 +55,6 @@ std::ostream& help(std::ostream& out) { << " --prof | show profiling result, available under debug mode.\n" << " --prof-all | show profiling result of all files," << "available under debug mode.\n" - << " -r, --repl | use repl interpreter(experimental).\n" << "file:\n" << " | execute file.\n" << "argv:\n" diff --git a/test/calc.nas b/test/calc.nas index f1de5ac..440701e 100644 --- a/test/calc.nas +++ b/test/calc.nas @@ -49,7 +49,7 @@ var count=func(s,c){ } var column=func(number){ - number=number>=1000?substr(str(number/1000),0,3)~'k':str(number); + number=number>=1000?substr(str(number/1000),0,4)~'k':str(number); return padding.leftpad(number,6); } diff --git a/test/datalog.nas b/test/datalog.nas index 4530a24..6757856 100644 --- a/test/datalog.nas +++ b/test/datalog.nas @@ -159,4 +159,46 @@ for(var i=10;i<1e6;i*=10) { println("cartesian"); for(var i=100;i<600;i+=100) { cartesian(i); +} + +var person_data = []; +var person = func(name, age) { + append(person_data, [name, age]); + return person_data; +} + +var know_data = []; +var know = func(name_a, name_b) { + append(know_data, [name_a, name_b]); +} + +person("a", 1); +person("b", 2); +person("c", 3); +person("d", 4); + +know("a", "b"); +know("b", "c"); +know("c", "d"); +know("d", "a"); + +# maybe_know(a, b) :- know(a, tmp), know(tmp, b). +var maybe_know_data = []; + +var temp = []; + +foreach(var i; know_data) { + foreach(var j; know_data) { + append(temp, [i[0], i[1], j[0], j[1]]); + } +} + +foreach(var i; temp) { + if (!cmp(i[1], i[2])) { + append(maybe_know_data, [i, i[0], i[3]]); + } +} + +foreach(var res; maybe_know_data) { + println(res[0], " -> ", res[1], " ", res[2]); } \ No newline at end of file