use std.padding; use std.process_bar; var mess = func(vec) { srand(); var s=size(vec); for (var i=s-1;i>=0;i-=1) { var r=int(rand()*i); (vec[r],vec[i])=(vec[i],vec[r]); } } var project = func(n) { # get(s) :- color(_, s, _). var ts=maketimestamp(); var bar=process_bar.high_resolution_bar(40); var color=[]; setsize(color,n); var last_step=0; ts.stamp(); for (var i=0;i1/500) { last_step=i; print(" ",bar.bar((i+1)/n)," ", padding.leftpad(str(int((i+1)/n*100)),3),"% | \r"); } } print(" ",bar.bar(1)~" 100% | ", padding.rightpad(str(ts.elapsedMSec()/1000),5)," s | "); mess(color); ts.stamp(); var cnt=0; foreach(var c;color) { var data=c[2]; cnt+=1; } println(padding.rightpad(str(cnt),7)," in ",ts.elapsedMSec()/1000," s"); } var select = func(n) { # get(s) :- color(_, _, x), message(x, s). var ts=maketimestamp(); var bar=process_bar.high_resolution_bar(40); var color=[]; var message=[]; setsize(color,n); setsize(message,n); var last_step=0; ts.stamp(); for (var i=0;i1/500) { last_step=i; print(" ",bar.bar((i+1)/n)," ", padding.leftpad(str(int((i+1)/n*100)),3),"% | \r"); } } print(" ",bar.bar(1)~" 100% | ", padding.rightpad(str(ts.elapsedMSec()/1000),5)," s | "); mess(color); mess(message); ts.stamp(); sort(color,func(a,b) {return a[2]res) { left=mid+1; } else { right=mid-1; } } } println(padding.rightpad(str(cnt),7)," in ",ts.elapsedMSec()/1000," s"); } var cartesian = func(n) { # get(x, y, z, a, b) :- color(x, y, z), message(a, b). var ts=maketimestamp(); var bar=process_bar.high_resolution_bar(40); var color=[]; var message=[]; setsize(color,n); setsize(message,n); var last_step=0; ts.stamp(); for (var i=0;i1/500) { last_step=i; print(" ",bar.bar((i+1)/n)," ", padding.leftpad(str(int((i+1)/n*100)),3),"% | \r"); } } print(" ",bar.bar(1)~" 100% | ", padding.rightpad(str(ts.elapsedMSec()/1000),5)," s | "); mess(color); mess(message); ts.stamp(); var res=[]; foreach(var c;color) { foreach(var m;message) { var tmp=[]; foreach(var k;c) { append(tmp,k); } foreach(var k;m) { append(tmp,k); } append(res,tmp); } } println(padding.rightpad(str(size(res)),7)," in ",ts.elapsedMSec()/1000," s"); } println("project"); for (var i=10;i<1e6;i*=10) { project(i); } println("select"); for (var i=10;i<1e6;i*=10) { select(i); } 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]); }