initial
This commit is contained in:
23
vscript/languages/squirrel/samples/ackermann.nut
Normal file
23
vscript/languages/squirrel/samples/ackermann.nut
Normal file
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
*
|
||||
* Original Javascript version by David Hedbor(http://www.bagley.org/~doug/shootout/)
|
||||
*
|
||||
*/
|
||||
|
||||
function Ack(M, N) {
|
||||
if (M == 0) return( N + 1 );
|
||||
if (N == 0) return( Ack(M - 1, 1) );
|
||||
return( Ack(M - 1, Ack(M, (N - 1))) );
|
||||
}
|
||||
|
||||
local n;
|
||||
|
||||
if(ARGS.len()!=0) {
|
||||
n = ARGS[0].tointeger();
|
||||
if(n < 1) n = 1;
|
||||
} else {
|
||||
n = 1;
|
||||
}
|
||||
print("n="+n+"\n");
|
||||
print("Ack(3,"+ n+ "):"+ Ack(3, n));
|
||||
|
||||
29
vscript/languages/squirrel/samples/array.nut
Normal file
29
vscript/languages/squirrel/samples/array.nut
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
*
|
||||
* Original Javascript version by David Hedbor(http://www.bagley.org/~doug/shootout/)
|
||||
*
|
||||
*/
|
||||
local n, i, k;
|
||||
|
||||
if(ARGS.len()!=0) {
|
||||
n = ARGS[0].tointeger();
|
||||
if(n < 1) n = 1;
|
||||
} else {
|
||||
n = 1;
|
||||
}
|
||||
|
||||
local x = []; x.resize(n);
|
||||
local y = []; y.resize(n);
|
||||
|
||||
for (i = 0; i < n; i+=1) {
|
||||
x[i] = i + 1;
|
||||
y[i] = 0;
|
||||
}
|
||||
|
||||
for (k = 0 ; k < n; k+=1) {
|
||||
for (i = n-1; i >= 0; i-=1) {
|
||||
y[i] = y[i]+ x[i];
|
||||
}
|
||||
}
|
||||
print(y[0].tostring()+" "+y[n-1]);
|
||||
|
||||
49
vscript/languages/squirrel/samples/class.nut
Normal file
49
vscript/languages/squirrel/samples/class.nut
Normal file
@@ -0,0 +1,49 @@
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
class BaseVector {
|
||||
constructor(...)
|
||||
{
|
||||
if(vargc >= 3) {
|
||||
x = vargv[0];
|
||||
y = vargv[1];
|
||||
z = vargv[2];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
x = 0;
|
||||
y = 0;
|
||||
z = 0;
|
||||
}
|
||||
|
||||
class Vector3 extends BaseVector {
|
||||
function _add(other)
|
||||
{
|
||||
if(other instanceof this.getclass())
|
||||
return ::Vector3(x+other.x,y+other.y,z+other.z);
|
||||
else
|
||||
throw "wrong parameter";
|
||||
}
|
||||
function Print()
|
||||
{
|
||||
::print(x+","+y+","+z+"\n");
|
||||
}
|
||||
}
|
||||
|
||||
local v0 = Vector3(1,2,3)
|
||||
local v1 = Vector3(11,12,13)
|
||||
local v2 = v0 + v1;
|
||||
v2.Print();
|
||||
|
||||
FakeNamespace <- {
|
||||
Utils = {}
|
||||
}
|
||||
|
||||
class FakeNamespace.Utils.SuperClass {
|
||||
constructor()
|
||||
{
|
||||
::print("FakeNamespace.Utils.SuperClass")
|
||||
}
|
||||
}
|
||||
|
||||
local testy = FakeNamespace.Utils.SuperClass();
|
||||
35
vscript/languages/squirrel/samples/classattributes.nut
Normal file
35
vscript/languages/squirrel/samples/classattributes.nut
Normal file
@@ -0,0 +1,35 @@
|
||||
class Foo {
|
||||
//constructor
|
||||
constructor(a)
|
||||
{
|
||||
testy = ["stuff",1,2,3];
|
||||
}
|
||||
//attributes of PrintTesty
|
||||
</ test = "freakin attribute"/>
|
||||
function PrintTesty()
|
||||
{
|
||||
foreach(i,val in testy)
|
||||
{
|
||||
::print("idx = "+i+" = "+val+" \n");
|
||||
}
|
||||
}
|
||||
//attributes of testy
|
||||
</ flippy = 10 , second = [1,2,3] />
|
||||
testy = null;
|
||||
|
||||
}
|
||||
|
||||
foreach(member,val in Foo)
|
||||
{
|
||||
::print(member+"\n");
|
||||
local attr;
|
||||
if((attr = Foo.getattributes(member)) != null) {
|
||||
foreach(i,v in attr)
|
||||
{
|
||||
::print("\t"+i+" = "+(typeof v)+"\n");
|
||||
}
|
||||
}
|
||||
else {
|
||||
::print("\t<no attributes>\n")
|
||||
}
|
||||
}
|
||||
25
vscript/languages/squirrel/samples/coroutines.nut
Normal file
25
vscript/languages/squirrel/samples/coroutines.nut
Normal file
@@ -0,0 +1,25 @@
|
||||
function coroutine_test(a,b)
|
||||
{
|
||||
::print(a+" "+b+"\n");
|
||||
local ret = ::suspend("suspend 1");
|
||||
::print("the coroutine says "+ret+"\n");
|
||||
ret = ::suspend("suspend 2");
|
||||
::print("the coroutine says "+ret+"\n");
|
||||
ret = ::suspend("suspend 3");
|
||||
::print("the coroutine says "+ret+"\n");
|
||||
return "I'm done"
|
||||
}
|
||||
|
||||
local coro = ::newthread(coroutine_test);
|
||||
|
||||
local susparam = coro.call("test","coroutine"); //starts the coroutine
|
||||
|
||||
local i = 1;
|
||||
do
|
||||
{
|
||||
::print("suspend passed ["+susparam+"]\n")
|
||||
susparam = coro.wakeup("ciao "+i);
|
||||
++i;
|
||||
}while(coro.getstatus()=="suspended")
|
||||
|
||||
::print("return passed ["+susparam+"]\n")
|
||||
52
vscript/languages/squirrel/samples/delegation.nut
Normal file
52
vscript/languages/squirrel/samples/delegation.nut
Normal file
@@ -0,0 +1,52 @@
|
||||
|
||||
PEntity <- {
|
||||
name="noname"
|
||||
pos={x=0,y=0,z=0}
|
||||
type="entity"
|
||||
//methamethod
|
||||
_typeof=function()
|
||||
{
|
||||
return type;
|
||||
}
|
||||
}
|
||||
|
||||
function PEntity::PrintPos()
|
||||
{
|
||||
::print("x="+pos.x+" y="+pos.y+" z="+pos.z+"\n");
|
||||
}
|
||||
|
||||
function PEntity::new(name,pos)
|
||||
{
|
||||
local newentity=clone ::PEntity;
|
||||
if(name)
|
||||
newentity.name=name;
|
||||
if(pos)
|
||||
newentity.pos=pos;
|
||||
return newentity;
|
||||
}
|
||||
|
||||
PPlayer <- {
|
||||
model="warrior.mdl"
|
||||
weapon="fist"
|
||||
health=100
|
||||
armor=0
|
||||
//overrides the parent type
|
||||
type="player"
|
||||
}
|
||||
|
||||
function PPlayer::new(name,pos)
|
||||
{
|
||||
local newplayer=delegate ::PEntity.new(name,pos) : clone ::PPlayer;
|
||||
return newplayer;
|
||||
}
|
||||
|
||||
local player=PPlayer.new("godzilla",{x=10,y=20,z=30});
|
||||
|
||||
::print("PLAYER NAME"+player.name+"\n");
|
||||
::print("ENTITY TYPE"+typeof player+"\n");
|
||||
|
||||
player.PrintPos();
|
||||
|
||||
player.pos.x=123;
|
||||
|
||||
player.PrintPos();
|
||||
15
vscript/languages/squirrel/samples/fibonacci.nut
Normal file
15
vscript/languages/squirrel/samples/fibonacci.nut
Normal file
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
*
|
||||
* Original Javascript version by David Hedbor(http://www.bagley.org/~doug/shootout/)
|
||||
*
|
||||
*/
|
||||
|
||||
function fib(n)
|
||||
{
|
||||
if (n < 2) return 1
|
||||
return fib(n-2) + fib(n-1)
|
||||
}
|
||||
|
||||
local n = ARGS.len()!=0?ARGS[0].tointeger():1
|
||||
|
||||
print(fib(n)+"\n")
|
||||
33
vscript/languages/squirrel/samples/flow.nut
Normal file
33
vscript/languages/squirrel/samples/flow.nut
Normal file
@@ -0,0 +1,33 @@
|
||||
function min(x,y)
|
||||
return x<y?x:y;
|
||||
|
||||
function max(x,y)
|
||||
return x>y?x:y;
|
||||
|
||||
if(min(100,200)>max(50,20))
|
||||
print("I'm useless statement just to show up the if/else\n");
|
||||
else
|
||||
print("squirrel!!\n");
|
||||
|
||||
print("\n")
|
||||
|
||||
function typy(obj)
|
||||
{
|
||||
switch(typeof obj)
|
||||
{
|
||||
case "integer":
|
||||
case "float":
|
||||
return "is a number";
|
||||
case "table":
|
||||
case "array":
|
||||
return "is a container";
|
||||
default:
|
||||
return "is other stuff"
|
||||
}
|
||||
}
|
||||
|
||||
local a=1,b={},c=function(a,b){return a+b;}
|
||||
|
||||
print("a "+typy(a)+"\n");
|
||||
print("b "+typy(b)+"\n");
|
||||
print("c "+typy(c)+"\n");
|
||||
42
vscript/languages/squirrel/samples/generators.nut
Normal file
42
vscript/languages/squirrel/samples/generators.nut
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
*Random number function from The Great Computer Language shootout
|
||||
*converted to a generator func
|
||||
*/
|
||||
|
||||
function gen_random(max) {
|
||||
local last=42
|
||||
local IM = 139968;
|
||||
local IA = 3877;
|
||||
local IC = 29573;
|
||||
for(;;){ //loops forever
|
||||
yield (max * (last = (last * IA + IC) % IM) / IM);
|
||||
}
|
||||
}
|
||||
|
||||
local randtor=gen_random(100);
|
||||
|
||||
print("RAND NUMBERS \n")
|
||||
|
||||
for(local i=0;i<10;i+=1)
|
||||
print(">"+resume randtor+"\n");
|
||||
|
||||
print("FIBONACCI \n")
|
||||
function fiboz(n)
|
||||
{
|
||||
local prev=0;
|
||||
local curr=1;
|
||||
yield 1;
|
||||
|
||||
for(local i=0;i<n-1;i+=1)
|
||||
{
|
||||
local res=prev+curr;
|
||||
prev=curr;
|
||||
yield curr=res;
|
||||
}
|
||||
return prev+curr;
|
||||
}
|
||||
|
||||
foreach(val in fiboz(10))
|
||||
{
|
||||
::print(">"+val+"\n");
|
||||
}
|
||||
1
vscript/languages/squirrel/samples/hello.nut
Normal file
1
vscript/languages/squirrel/samples/hello.nut
Normal file
@@ -0,0 +1 @@
|
||||
print("Hello World!")
|
||||
40
vscript/languages/squirrel/samples/list.nut
Normal file
40
vscript/languages/squirrel/samples/list.nut
Normal file
@@ -0,0 +1,40 @@
|
||||
/*translation of the list test from The Great Computer Language Shootout
|
||||
*/
|
||||
|
||||
function compare_arr(a1,a2)
|
||||
{
|
||||
foreach(i,val in a1)
|
||||
if(val!=a2[i])return null;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function test()
|
||||
{
|
||||
local size=10000
|
||||
local l1=[]; l1.resize(size);
|
||||
for(local i=0;i<size;i+=1) l1[i]=i;
|
||||
local l2=clone l1;
|
||||
local l3=[]
|
||||
|
||||
l2.reverse();
|
||||
while(l2.len()>0)
|
||||
l3.append(l2.pop());
|
||||
while(l3.len()>0)
|
||||
l2.append(l3.pop());
|
||||
l1.reverse();
|
||||
|
||||
if(compare_arr(l1,l2))
|
||||
return l1.len();
|
||||
return null;
|
||||
}
|
||||
|
||||
local n = ARGS.len()!=0?ARGS[0].tointeger():1
|
||||
for(local i=0;i<n;i+=1)
|
||||
if(!test())
|
||||
{
|
||||
print("failed");
|
||||
return;
|
||||
}
|
||||
|
||||
print("oki doki");
|
||||
|
||||
32
vscript/languages/squirrel/samples/loops.nut
Normal file
32
vscript/languages/squirrel/samples/loops.nut
Normal file
@@ -0,0 +1,32 @@
|
||||
local arr=["one","two","three"]
|
||||
|
||||
::print("FOREACH\n");
|
||||
|
||||
foreach(i,val in arr)
|
||||
{
|
||||
::print("index ["+i+"]="+val+"\n");
|
||||
}
|
||||
|
||||
::print("FOR\n");
|
||||
|
||||
for(local i=0;i<arr.len();i+=1)
|
||||
{
|
||||
::print("index ["+i+"]="+arr[i]+"\n");
|
||||
}
|
||||
|
||||
::print("WHILE\n");
|
||||
|
||||
local i=0;
|
||||
while(i<arr.len())
|
||||
{
|
||||
::print("index ["+i+"]="+arr[i]+"\n");
|
||||
i+=1;
|
||||
}
|
||||
::print("DO WHILE\n");
|
||||
|
||||
local i=0;
|
||||
do
|
||||
{
|
||||
::print("index ["+i+"]="+arr[i]+"\n");
|
||||
i+=1;
|
||||
}while(i<arr.len());
|
||||
44
vscript/languages/squirrel/samples/matrix.nut
Normal file
44
vscript/languages/squirrel/samples/matrix.nut
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
*
|
||||
* Original Javascript version by David Hedbor(http://www.bagley.org/~doug/shootout/)
|
||||
*
|
||||
*/
|
||||
local SIZE=30;
|
||||
|
||||
function mkmatrix(rows, cols) {
|
||||
local i, j, count = 1;
|
||||
local m = []; m.resize(rows);
|
||||
for (i = 0; i < rows; i+=1) {
|
||||
m[i] = [];m[i].resize(cols)
|
||||
for (j = 0; j < cols; j+=1) {
|
||||
m[i][j] = count+=1;
|
||||
}
|
||||
}
|
||||
return m;
|
||||
}
|
||||
|
||||
function mmult(rows, cols, m1, m2, m3) {
|
||||
local i, j, k, val;
|
||||
for (i = 0; i < rows; i+=1) {
|
||||
for (j = 0; j < cols; j+=1) {
|
||||
val = 0;
|
||||
for (k = 0; k < cols; k+=1) {
|
||||
val += m1[i][k] * m2[k][j];
|
||||
}
|
||||
m3[i][j] = val;
|
||||
}
|
||||
}
|
||||
return m3;
|
||||
}
|
||||
|
||||
local n = ARGS.len()!=0?ARGS[0].tointeger():1
|
||||
|
||||
local m1 = mkmatrix(SIZE, SIZE);
|
||||
local m2 = mkmatrix(SIZE, SIZE);
|
||||
local mm = mkmatrix(SIZE, SIZE);
|
||||
|
||||
for (local i = 0; i < n; i+=1) {
|
||||
mmult(SIZE, SIZE, m1, m2, mm);
|
||||
}
|
||||
|
||||
print(mm[0][0]+" "+mm[2][3]+" "+mm[3][2]+" "+mm[4][4]);
|
||||
115
vscript/languages/squirrel/samples/metamethods.nut
Normal file
115
vscript/languages/squirrel/samples/metamethods.nut
Normal file
@@ -0,0 +1,115 @@
|
||||
|
||||
local base_vec={
|
||||
function _add(n)
|
||||
{
|
||||
return {
|
||||
x=x+n.x,
|
||||
y=y+n.y,
|
||||
z=z+n.z,
|
||||
}
|
||||
}
|
||||
function _sub(n)
|
||||
{
|
||||
return {
|
||||
x=x-n.x,
|
||||
y=y-n.y,
|
||||
z=z-n.z,
|
||||
}
|
||||
}
|
||||
function _div(n)
|
||||
{
|
||||
return {
|
||||
x=x/n.x,
|
||||
y=y/n.y,
|
||||
z=z/n.z,
|
||||
}
|
||||
}
|
||||
function _mul(n)
|
||||
{
|
||||
return {
|
||||
x=x*n.x,
|
||||
y=y*n.y,
|
||||
z=z*n.z,
|
||||
}
|
||||
}
|
||||
function _modulo(n)
|
||||
{
|
||||
return {
|
||||
x=x%n,
|
||||
y=y%n,
|
||||
z=z%n,
|
||||
}
|
||||
}
|
||||
function _typeof() {return "vector";}
|
||||
function _get(key)
|
||||
{
|
||||
if(key==100)
|
||||
{
|
||||
return test_field;
|
||||
}
|
||||
},
|
||||
function _set(key,val)
|
||||
{
|
||||
::print("key = "+key+"\n");
|
||||
::print("val = "+val+"\n")
|
||||
if(key==100)
|
||||
{
|
||||
return test_field=val;
|
||||
}
|
||||
}
|
||||
test_field="nothing"
|
||||
}
|
||||
|
||||
function vector(_x,_y,_z):(base_vec)
|
||||
{
|
||||
return delegate base_vec : {x=_x,y=_y,z=_z }
|
||||
}
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
local v1=vector(1.5,2.5,3.5);
|
||||
local v2=vector(1.5,2.5,3.5);
|
||||
|
||||
local r=v1+v2;
|
||||
|
||||
|
||||
foreach(i,val in r)
|
||||
{
|
||||
print(i+" = "+val+"\n");
|
||||
}
|
||||
|
||||
r=v1*v2;
|
||||
|
||||
foreach(i,val in r)
|
||||
{
|
||||
print(i+" = "+val+"\n");
|
||||
}
|
||||
|
||||
r=v1/v2;
|
||||
|
||||
foreach(i,val in r)
|
||||
{
|
||||
print(i+" = "+val+"\n");
|
||||
}
|
||||
|
||||
r=v1-v2;
|
||||
|
||||
foreach(i,val in r)
|
||||
{
|
||||
print(i+" = "+val+"\n");
|
||||
}
|
||||
|
||||
r=v1%2;
|
||||
|
||||
foreach(i,val in r)
|
||||
{
|
||||
print(i+" = "+val+"\n");
|
||||
}
|
||||
|
||||
print(v1[100]+"\n");
|
||||
v1[100]="set SUCCEEDED";
|
||||
print(v1[100]+"\n");
|
||||
|
||||
if(typeof v1=="vector")
|
||||
print("<SUCCEEDED>\n");
|
||||
else
|
||||
print("<FAILED>\n");
|
||||
61
vscript/languages/squirrel/samples/methcall.nut
Normal file
61
vscript/languages/squirrel/samples/methcall.nut
Normal file
@@ -0,0 +1,61 @@
|
||||
/*translation of the methcall test from The Great Computer Language Shootout
|
||||
*/
|
||||
|
||||
Toggle <- {
|
||||
bool=null
|
||||
}
|
||||
|
||||
function Toggle::value() {
|
||||
return bool;
|
||||
}
|
||||
|
||||
function Toggle::activate() {
|
||||
bool = !bool;
|
||||
return this;
|
||||
}
|
||||
|
||||
function Toggle::new(startstate) {
|
||||
local newo=clone this;
|
||||
newo.bool = startstate;
|
||||
return newo;
|
||||
}
|
||||
|
||||
NthToggle <- {
|
||||
count_max=null
|
||||
count=0
|
||||
}
|
||||
|
||||
function NthToggle::new(start_state,max_counter)
|
||||
{
|
||||
local newo=delegate ::Toggle.new(start_state) : clone this;
|
||||
newo.count_max <- max_counter
|
||||
return newo;
|
||||
}
|
||||
|
||||
function NthToggle::activate ()
|
||||
{
|
||||
count+=1
|
||||
if (count >= count_max) {
|
||||
bool = !bool;
|
||||
count = 0;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
local n = ARGS.len()!=0?ARGS[0].tointeger():1
|
||||
|
||||
local val = 1;
|
||||
local toggle = Toggle.new(val);
|
||||
for (local i=0; i<n; i+=1) {
|
||||
val = toggle.activate().value();
|
||||
|
||||
}
|
||||
print(toggle.value() ? "true\n" : "false\n");
|
||||
|
||||
val = 1;
|
||||
local ntoggle = NthToggle.new(val, 3);
|
||||
for (local i=0; i<n; i+=1) {
|
||||
val = ntoggle.activate().value();
|
||||
}
|
||||
print(ntoggle.value() ? "true\n" : "false\n");
|
||||
24
vscript/languages/squirrel/samples/tailstate.nut
Normal file
24
vscript/languages/squirrel/samples/tailstate.nut
Normal file
@@ -0,0 +1,24 @@
|
||||
function state1()
|
||||
{
|
||||
::suspend("state1");
|
||||
return state2();
|
||||
}
|
||||
|
||||
function state2()
|
||||
{
|
||||
::suspend("state2");
|
||||
return state3();
|
||||
}
|
||||
|
||||
function state3()
|
||||
{
|
||||
::suspend("state3");
|
||||
return state1();
|
||||
}
|
||||
|
||||
local statethread = ::newthread(state1)
|
||||
|
||||
::print(statethread.call()+"\n");
|
||||
|
||||
for(local i = 0; i < 10000; i++)
|
||||
::print(statethread.wakeup()+"\n");
|
||||
Reference in New Issue
Block a user