mirror of
https://github.com/ValKmjolnir/Nasal-Interpreter.git
synced 2026-07-21 10:28:50 +08:00
fully functional closure
This commit is contained in:
+25
-25
@@ -2,65 +2,65 @@
|
||||
# valkmjolnir 2021/3/31
|
||||
var list=func()
|
||||
{
|
||||
var _={begin:nil,end:nil};
|
||||
var (begin,end)=(nil,nil);
|
||||
return
|
||||
{
|
||||
push_back:func(elem)
|
||||
{
|
||||
var tmp={elem:elem,prev:nil,next:nil};
|
||||
if(_.end!=nil)
|
||||
if(end!=nil)
|
||||
{
|
||||
_.end.next=tmp;
|
||||
tmp.prev=_.end;
|
||||
_.end=tmp;
|
||||
end.next=tmp;
|
||||
tmp.prev=end;
|
||||
end=tmp;
|
||||
}
|
||||
else
|
||||
_.begin=_.end=tmp;
|
||||
begin=end=tmp;
|
||||
return;
|
||||
},
|
||||
push_front:func(elem)
|
||||
{
|
||||
var tmp={elem:elem,prev:nil,next:nil};
|
||||
if(_.begin!=nil)
|
||||
if(begin!=nil)
|
||||
{
|
||||
_.begin.prev=tmp;
|
||||
tmp.next=_.begin;
|
||||
_.begin=tmp;
|
||||
begin.prev=tmp;
|
||||
tmp.next=begin;
|
||||
begin=tmp;
|
||||
}
|
||||
else
|
||||
_.begin=_.end=tmp;
|
||||
begin=end=tmp;
|
||||
return;
|
||||
},
|
||||
pop_back:func()
|
||||
{
|
||||
if(_.end!=nil)
|
||||
_.end=_.end.prev;
|
||||
if(_.end==nil)
|
||||
_.begin=nil;
|
||||
if(end!=nil)
|
||||
end=end.prev;
|
||||
if(end==nil)
|
||||
begin=nil;
|
||||
else
|
||||
_.end.next=nil;
|
||||
end.next=nil;
|
||||
return;
|
||||
},
|
||||
pop_front:func()
|
||||
{
|
||||
if(_.begin!=nil)
|
||||
_.begin=_.begin.next;
|
||||
if(_.begin==nil)
|
||||
_.end=nil;
|
||||
if(begin!=nil)
|
||||
begin=begin.next;
|
||||
if(begin==nil)
|
||||
end=nil;
|
||||
else
|
||||
_.begin.prev=nil;
|
||||
begin.prev=nil;
|
||||
return;
|
||||
},
|
||||
front:func()
|
||||
{
|
||||
if(_.begin!=nil)
|
||||
return _.begin.elem;
|
||||
if(begin!=nil)
|
||||
return begin.elem;
|
||||
return nil;
|
||||
},
|
||||
back:func()
|
||||
{
|
||||
if(_.end!=nil)
|
||||
return _.end.elem;
|
||||
if(end!=nil)
|
||||
return end.elem;
|
||||
return nil;
|
||||
},
|
||||
};
|
||||
|
||||
+13
-13
@@ -2,7 +2,7 @@
|
||||
# valkmjolnir 2021/3/31
|
||||
var queue=func()
|
||||
{
|
||||
var _={begin:nil,end:nil};
|
||||
var (begin,end)=(nil,nil);
|
||||
return
|
||||
{
|
||||
push:func(elem)
|
||||
@@ -12,35 +12,35 @@ var queue=func()
|
||||
elem:elem,
|
||||
next:nil
|
||||
};
|
||||
if(_.begin==nil)
|
||||
_.begin=_.end=new_node;
|
||||
if(begin==nil)
|
||||
begin=end=new_node;
|
||||
else
|
||||
{
|
||||
_.end.next=new_node;
|
||||
_.end=new_node;
|
||||
end.next=new_node;
|
||||
end=new_node;
|
||||
}
|
||||
return;
|
||||
},
|
||||
pop:func()
|
||||
{
|
||||
if(_.begin!=nil)
|
||||
_.begin=_.begin.next;
|
||||
if(_.begin==nil)
|
||||
_.end=nil;
|
||||
if(begin!=nil)
|
||||
begin=begin.next;
|
||||
if(begin==nil)
|
||||
end=nil;
|
||||
},
|
||||
front:func()
|
||||
{
|
||||
if(_.begin!=nil)
|
||||
return _.begin.elem;
|
||||
if(begin!=nil)
|
||||
return begin.elem;
|
||||
return nil;
|
||||
},
|
||||
clear:func()
|
||||
{
|
||||
_.begin=_.end=nil;
|
||||
begin=end=nil;
|
||||
},
|
||||
empty:func()
|
||||
{
|
||||
return _.begin==nil;
|
||||
return begin==nil;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
+7
-7
@@ -2,35 +2,35 @@
|
||||
# valkmjolnir 2021/3/31
|
||||
var stack=func()
|
||||
{
|
||||
var _={next:nil};
|
||||
var next=nil;
|
||||
return
|
||||
{
|
||||
push:func(elem)
|
||||
{
|
||||
_.next={elem:elem,next:_.next};
|
||||
next={elem:elem,next:next};
|
||||
return;
|
||||
},
|
||||
pop:func()
|
||||
{
|
||||
var tmp=_.next;
|
||||
var tmp=next;
|
||||
if(tmp!=nil)
|
||||
_.next=tmp.next;
|
||||
next=tmp.next;
|
||||
return;
|
||||
},
|
||||
top:func()
|
||||
{
|
||||
var tmp=_.next;
|
||||
var tmp=next;
|
||||
if(tmp!=nil)
|
||||
return tmp.elem;
|
||||
return nil;
|
||||
},
|
||||
clear:func()
|
||||
{
|
||||
_.next=nil;
|
||||
next=nil;
|
||||
},
|
||||
empty:func()
|
||||
{
|
||||
return _.next==nil;
|
||||
return next==nil;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user