diff --git a/file-reader.expr b/file-reader.expr new file mode 100644 index 0000000..5b170b1 --- /dev/null +++ b/file-reader.expr @@ -0,0 +1,33 @@ +builtin ["os.file", "base"]; + +readInt=func(fh){ + line=readFile(fh); + line ? [nil] {nil} :: {int(line)} +}; + +ds={ + "init":func(filename){ + fh=openFile(filename); + fh ? [nil] {nil} :: { @current=readInt(fh); @prev=@current }; + fh + }, + "current":func(){ + prev + }, + "next":func(fh){ + current ? + [nil] {current} + :: {@prev=current; @current=readInt(fh) but current} + }, + "clean":func(fh){ + closeFile(fh) + } +} + +//;f=$(ds, "int.list") +/* +;f++ +;f++ +;f++ +*/ +//;add(f) diff --git a/int.list b/int.list new file mode 100644 index 0000000..88aac63 --- /dev/null +++ b/int.list @@ -0,0 +1,4 @@ +10 +20 +5 +12 diff --git a/iterator.expr b/iterator.expr new file mode 100644 index 0000000..4e3c0d1 --- /dev/null +++ b/iterator.expr @@ -0,0 +1,18 @@ +ds={ + "init":func(end){@end=end; @current=0; @prev=@current}, + "current":func(){prev}, + "next":func(){ + (current <= end) ? [true] {@current=current+1; @prev=current} :: {nil} + }, + "reset":func(){@current=0; @prev=@current} +} + +// Example +//; +//it=$(ds,3); +//it++; +//it."reset" +//it++; +//it++; +//add(it) +