mirror of
https://github.com/ProgramSnail/Lama.git
synced 2025-12-06 06:48:48 +00:00
local -> var; scope reformatted; singleton is killed finally
This commit is contained in:
parent
5ae88f820d
commit
216e716251
11067 changed files with 12168 additions and 12173 deletions
|
|
@ -8,7 +8,7 @@
|
|||
import List;
|
||||
|
||||
public fun initArray (n, f) {
|
||||
local a = makeArray (n), i;
|
||||
var a = makeArray (n), i;
|
||||
|
||||
for i := 0, i < n, i := i + 1 do
|
||||
a [i] := f (i)
|
||||
|
|
@ -22,7 +22,7 @@ public fun mapArray (f, a) {
|
|||
}
|
||||
|
||||
public fun arrayList (a) {
|
||||
local i = 0, res = [0, {}], curr = res;
|
||||
var i = 0, res = [0, {}], curr = res;
|
||||
|
||||
for skip, i < a.length, i := i + 1 do
|
||||
curr [1] := a [i] : curr [1];
|
||||
|
|
@ -33,7 +33,7 @@ public fun arrayList (a) {
|
|||
}
|
||||
|
||||
public fun listArray (l) {
|
||||
local a = makeArray (l.size);
|
||||
var a = makeArray (l.size);
|
||||
|
||||
fun inner (i, l) {
|
||||
case l of {} -> skip | h : t -> a[i] := h; inner (i+1, t) esac
|
||||
|
|
@ -44,7 +44,7 @@ public fun listArray (l) {
|
|||
}
|
||||
|
||||
public fun foldlArray (f, acc, a) {
|
||||
local i = 0;
|
||||
var i = 0;
|
||||
|
||||
for skip, i < a.length, i := i+1 do
|
||||
acc := f (acc, a[i])
|
||||
|
|
@ -54,7 +54,7 @@ public fun foldlArray (f, acc, a) {
|
|||
}
|
||||
|
||||
public fun foldrArray (f, acc, a) {
|
||||
local i = a.length - 1;
|
||||
var i = a.length - 1;
|
||||
|
||||
for skip, i >= 0, i := i-1 do
|
||||
acc := f (acc, a[i])
|
||||
|
|
@ -64,7 +64,7 @@ public fun foldrArray (f, acc, a) {
|
|||
}
|
||||
|
||||
public fun iterArray (f, a) {
|
||||
local i = 0;
|
||||
var i = 0;
|
||||
|
||||
for skip, i < a.length, i := i+1 do
|
||||
f (a [i])
|
||||
|
|
@ -72,7 +72,7 @@ public fun iterArray (f, a) {
|
|||
}
|
||||
|
||||
public fun iteriArray (f, a) {
|
||||
local i = 0;
|
||||
var i = 0;
|
||||
|
||||
for skip, i < a.length, i := i+1 do
|
||||
f (i, a [i])
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ public fun emptyBuffer () {
|
|||
|
||||
-- Creates a buffer with one element x
|
||||
public fun singletonBuffer (x) {
|
||||
local y = singleton (x);
|
||||
var y = {x};
|
||||
|
||||
[y, y]
|
||||
}
|
||||
|
|
@ -25,10 +25,10 @@ public fun listBuffer (x) {
|
|||
-- Adds x to the end of buffer buf
|
||||
public fun addBuffer (buf, x) {
|
||||
case buf of
|
||||
{} -> local y = singleton (x);
|
||||
{} -> var y = {x};
|
||||
[y, y]
|
||||
| [head, last] ->
|
||||
last[1] := singleton (x);
|
||||
last[1] := {x};
|
||||
[head, last[1]]
|
||||
esac
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ public fun validateColl ([t, compare]) {
|
|||
| MNode (k, _, bf, l, r) ->
|
||||
if verify (k)
|
||||
then
|
||||
local lh = inner (l, fun (x) {compare (x, k) < 0}),
|
||||
var lh = inner (l, fun (x) {compare (x, k) < 0}),
|
||||
rh = inner (r, fun (x) {compare (x, k) > 0});
|
||||
|
||||
if bf == lh - rh
|
||||
|
|
@ -60,7 +60,7 @@ fun insertColl ([m, compare], pk, v, sort) {
|
|||
if left
|
||||
then case node of
|
||||
MNode (k, v, x, l, MNode (rk, rv, y, ll, rr)) ->
|
||||
local x0 = if y > 0 then x + 1 else x - y + 1 fi,
|
||||
var x0 = if y > 0 then x + 1 else x - y + 1 fi,
|
||||
y0 = if x0 > 0
|
||||
then
|
||||
if y > 0
|
||||
|
|
@ -74,7 +74,7 @@ fun insertColl ([m, compare], pk, v, sort) {
|
|||
esac
|
||||
else case node of
|
||||
MNode (k, v, x, MNode (lk, lv, y, ll, rr), r) ->
|
||||
local x0 = if y < 0 then x - 1 else x - y - 1 fi,
|
||||
var x0 = if y < 0 then x - 1 else x - y - 1 fi,
|
||||
y0 = if x0 > 0
|
||||
then y - 1
|
||||
else
|
||||
|
|
@ -95,7 +95,7 @@ fun insertColl ([m, compare], pk, v, sort) {
|
|||
case m of
|
||||
{} -> [true, MNode (pk, append (v, {}), 0, {}, {})]
|
||||
| MNode (kk, vv, bf, l, r) ->
|
||||
local c = compare (pk, kk);
|
||||
var c = compare (pk, kk);
|
||||
if c == 0
|
||||
then [false, MNode (kk, append (v, vv), bf, l, r)]
|
||||
else if c < 0
|
||||
|
|
@ -145,7 +145,7 @@ fun findColl ([m, compare], pk, sort) {
|
|||
case m of
|
||||
{} -> None
|
||||
| MNode (kk, vv, _, l, r) ->
|
||||
local c = compare (pk, kk);
|
||||
var c = compare (pk, kk);
|
||||
if c == 0
|
||||
then extract (vv)
|
||||
else inner (if c < 0 then l else r fi)
|
||||
|
|
@ -168,7 +168,7 @@ fun removeColl ([m, compare], pk, sort) {
|
|||
case m of
|
||||
{} -> m
|
||||
| MNode (kk, vv, bf, l, r) ->
|
||||
local c = compare (pk, kk);
|
||||
var c = compare (pk, kk);
|
||||
if c == 0
|
||||
then MNode (kk, delete (vv), bf, l, r)
|
||||
else if c < 0
|
||||
|
|
@ -319,9 +319,9 @@ public fun lookupMemo (mm@[p, m], v) {
|
|||
case v of
|
||||
#string -> mm[1] := addMap (m, v, v); v
|
||||
| _ ->
|
||||
local vc = clone (v), i = case vc of #fun -> 1 | _ -> 0 esac;
|
||||
var vc = clone (v), i = case vc of #fun -> 1 | _ -> 0 esac;
|
||||
for skip, i < v.length, i := i + 1 do
|
||||
local vci = lookupMemo (mm, vc [i]);
|
||||
var vci = lookupMemo (mm, vc [i]);
|
||||
vc [i] := vci
|
||||
od;
|
||||
mm [1] := addMap (m, vc, vc);
|
||||
|
|
@ -337,7 +337,7 @@ public fun emptyHashTab (n, hash, compare) {
|
|||
}
|
||||
|
||||
public fun addHashTab (ht@[a, compare, hash], k, v) {
|
||||
local h = hash (k);
|
||||
var h = hash (k);
|
||||
|
||||
a [h] := [k, v] : a [h];
|
||||
|
||||
|
|
@ -352,7 +352,7 @@ public fun findHashTab ([a, compare, hash], k) {
|
|||
}
|
||||
|
||||
public fun removeHashTab (ht@[a, compare, hash], k) {
|
||||
local h = hash (k);
|
||||
var h = hash (k);
|
||||
|
||||
a [h] := remove (fun ([k0, _]) {compare (k, k0) == 0}, a [h]);
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import Ref;
|
|||
|
||||
-- Generic comparison for shared/cyclic data structures
|
||||
public infix =?= at < (x, y) {
|
||||
local m = ref (emptyMap (flatCompare));
|
||||
var m = ref (emptyMap (flatCompare));
|
||||
|
||||
fun alreadyEq (x, y) {
|
||||
fun find (x) {
|
||||
|
|
@ -36,7 +36,7 @@ public infix =?= at < (x, y) {
|
|||
|
||||
case [find (x), find (y)] of
|
||||
[None, None] ->
|
||||
local v = [1];
|
||||
var v = [1];
|
||||
m ::= addMap (addMap (deref (m), x, v), y, v);
|
||||
false
|
||||
|
||||
|
|
@ -66,9 +66,9 @@ public infix =?= at < (x, y) {
|
|||
}
|
||||
|
||||
fun cmpargs (x, y, from) {
|
||||
local diff = x.length - y.length;
|
||||
var diff = x.length - y.length;
|
||||
|
||||
for local i = from;, i < x.length && diff == 0, i := i + 1 do
|
||||
for var i = from;, i < x.length && diff == 0, i := i + 1 do
|
||||
diff := cmprec (x[i], y[i])
|
||||
od;
|
||||
|
||||
|
|
@ -79,7 +79,7 @@ public infix =?= at < (x, y) {
|
|||
if alreadyEq (x, y)
|
||||
then 0
|
||||
else
|
||||
local diff = x.kindOf - y.kindOf;
|
||||
var diff = x.kindOf - y.kindOf;
|
||||
|
||||
if diff != 0 then diff
|
||||
else
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ public infix # after * (f, g) {
|
|||
}
|
||||
|
||||
public fun fix (f) {
|
||||
local knot = ref ({});
|
||||
var knot = ref ({});
|
||||
|
||||
knot ::= fun (x) {f (deref (knot)) (x)};
|
||||
|
||||
|
|
|
|||
|
|
@ -4,13 +4,13 @@
|
|||
-- Deferred computations.
|
||||
|
||||
public fun makeLazy (f) {
|
||||
local value, set = false;
|
||||
var value, set = false;
|
||||
|
||||
fun () {
|
||||
if set
|
||||
then value
|
||||
else
|
||||
local c; -- need this temporary since in value := f () value would
|
||||
var c; -- need this temporary since in value := f () value would
|
||||
-- create an intermediate managed pointer
|
||||
set := true;
|
||||
c := f ();
|
||||
|
|
|
|||
|
|
@ -3,10 +3,6 @@
|
|||
--
|
||||
-- This unit provides a set of list-manipulation primitives.
|
||||
|
||||
public fun singleton (x) {
|
||||
x : {}
|
||||
}
|
||||
|
||||
public fun size (l) {
|
||||
case l of
|
||||
{} -> 0
|
||||
|
|
@ -75,10 +71,10 @@ public fun find (f, l) {
|
|||
}
|
||||
|
||||
public fun flatten (l) {
|
||||
local res = [0, {}], curr = [res];
|
||||
var res = [0, {}], curr = [res];
|
||||
|
||||
fun append (x) {
|
||||
local new = x : {};
|
||||
var new = x : {};
|
||||
|
||||
curr [0][1] := new;
|
||||
curr [0] := new
|
||||
|
|
@ -90,10 +86,10 @@ public fun flatten (l) {
|
|||
}
|
||||
|
||||
public fun deepFlatten (l) {
|
||||
local res = [0, {}], curr = [res];
|
||||
var res = [0, {}], curr = [res];
|
||||
|
||||
fun append (x) {
|
||||
local new = x : {};
|
||||
var new = x : {};
|
||||
|
||||
curr [0][1] := new;
|
||||
curr [0] := new
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
-- (e.g. "identifier", "string constant", etc.), used for error
|
||||
-- reporting
|
||||
public fun createRegexp (r, name) {
|
||||
local l = [regexp (r), name];
|
||||
var l = [regexp (r), name];
|
||||
l
|
||||
}
|
||||
|
||||
|
|
@ -32,7 +32,7 @@ fun createMatcher (buf, pos, line, col) {
|
|||
|
||||
-- Moves the position pointer on given number of characters.
|
||||
fun shift (n) {
|
||||
local i, l = line, c = col;
|
||||
var i, l = line, c = col;
|
||||
|
||||
for i := pos, i < pos+n, i := i+1 do
|
||||
case buf [i] of
|
||||
|
|
@ -54,7 +54,7 @@ fun createMatcher (buf, pos, line, col) {
|
|||
}
|
||||
|
||||
fun matchRegexp (r) {
|
||||
local n;
|
||||
var n;
|
||||
|
||||
if (n := regexpMatch (r[0], buf, pos)) >= 0
|
||||
then Succ (substring (buf, pos, n), shift (n))
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import Ref;
|
|||
import Fun;
|
||||
import Matcher;
|
||||
|
||||
local tab, hct, restab, log = false;
|
||||
var tab, hct, restab, log = false;
|
||||
|
||||
public fun logOn () {
|
||||
log := true
|
||||
|
|
@ -36,7 +36,7 @@ public fun memo (f) {
|
|||
|
||||
fun (k) {
|
||||
fun (s) {
|
||||
local t =
|
||||
var t =
|
||||
case findHashTab (deref (tab), f) of
|
||||
Some (t) -> t
|
||||
esac;
|
||||
|
|
@ -188,7 +188,7 @@ public fun showStream (name) {
|
|||
}
|
||||
|
||||
fun createResult () {
|
||||
local errors = ref ({}),
|
||||
var errors = ref ({}),
|
||||
line = ref (0),
|
||||
col = ref (0),
|
||||
value = ref ({}),
|
||||
|
|
@ -209,14 +209,14 @@ fun createResult () {
|
|||
| Fail (err, l, c) ->
|
||||
if deref (hasError)
|
||||
then
|
||||
local c = compare ([line, col], [l, c]);
|
||||
var c = compare ([line, col], [l, c]);
|
||||
|
||||
if c == 0 then errors ::= err : deref (errors)
|
||||
elif c < 0 then errors ::= singleton (err); line ::= l; col ::= c
|
||||
elif c < 0 then errors ::= {err}; line ::= l; col ::= c
|
||||
fi
|
||||
else
|
||||
hasError ::= true;
|
||||
errors ::= singleton (err);
|
||||
errors ::= {err};
|
||||
line ::= l;
|
||||
col ::= c
|
||||
fi
|
||||
|
|
@ -242,7 +242,7 @@ fun result (acc) {
|
|||
}
|
||||
|
||||
public fun parse (p, m) {
|
||||
local acc = createResult ();
|
||||
var acc = createResult ();
|
||||
|
||||
p (acc.k) (m);
|
||||
|
||||
|
|
@ -250,7 +250,7 @@ public fun parse (p, m) {
|
|||
}
|
||||
|
||||
public fun parseString (p, s) {
|
||||
local acc = createResult ();
|
||||
var acc = createResult ();
|
||||
|
||||
p (acc.k) (initMatcher (s));
|
||||
|
||||
|
|
@ -277,7 +277,7 @@ public fun right (op, f) {
|
|||
fun altl (level) {
|
||||
case level of
|
||||
[assoc, ps] ->
|
||||
local assfun = case assoc of Left -> left | Right -> right | Nona -> left esac;
|
||||
var assfun = case assoc of Left -> left | Right -> right | Nona -> left esac;
|
||||
case map (fun (p) {
|
||||
case p of
|
||||
[op, sema] -> op @ fun (op) {assfun (op, sema)}
|
||||
|
|
@ -293,7 +293,7 @@ public fun expr (ops, opnd) {
|
|||
case ops of
|
||||
{} -> fun (c) {opnd @ c}
|
||||
| level : tl ->
|
||||
local lops = altl (level),
|
||||
var lops = altl (level),
|
||||
next = inner (tl);
|
||||
|
||||
case level.fst of
|
||||
|
|
|
|||
|
|
@ -15,9 +15,9 @@ public fun randomInt () {
|
|||
|
||||
-- Generates a printable ASCII string of given length
|
||||
public fun randomString (len) {
|
||||
local s = makeString (len);
|
||||
var s = makeString (len);
|
||||
|
||||
for local i = 0;, i < len, i := i+1
|
||||
for var i = 0;, i < len, i := i+1
|
||||
do
|
||||
s [i] := 32 + random (94) -- printable ASCII set
|
||||
od;
|
||||
|
|
@ -33,10 +33,10 @@ public fun randomArray (f, n) {
|
|||
|
||||
-- Splits a number n in a random sequence of k summands
|
||||
public fun split (n, k) {
|
||||
local a = makeArray (k),
|
||||
var a = makeArray (k),
|
||||
m = n;
|
||||
|
||||
for local i = 0;, i < k, i := i + 1
|
||||
for var i = 0;, i < k, i := i + 1
|
||||
do
|
||||
if i == k - 1
|
||||
then a[i] := m
|
||||
|
|
@ -53,13 +53,13 @@ public fun split (n, k) {
|
|||
-- fn gets an array of values of length n and generates some node; leaf is a fucntion without
|
||||
-- arguments which create a leaf.
|
||||
public fun structure (n, nodeSpec, leaf) {
|
||||
local k = nodeSpec.length;
|
||||
var k = nodeSpec.length;
|
||||
|
||||
fun rec (n) {
|
||||
if n <= 1
|
||||
then leaf ()
|
||||
else
|
||||
local ns = nodeSpec [random (k)];
|
||||
var ns = nodeSpec [random (k)];
|
||||
|
||||
ns [1] (mapArray (rec, split (n, ns [0])))
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
-- Creates a new timer
|
||||
public fun timer () {
|
||||
local t = time ();
|
||||
var t = time ();
|
||||
|
||||
fun () {
|
||||
time () - t
|
||||
|
|
@ -15,7 +15,7 @@ public fun timer () {
|
|||
|
||||
-- Formats a given time as a floating-point number
|
||||
public fun toSeconds (t) {
|
||||
local s = sprintf ("%d", t);
|
||||
var s = sprintf ("%d", t);
|
||||
|
||||
if s.length >= 7
|
||||
then
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import Collection;
|
||||
|
||||
local s = emptySet (compare), i;
|
||||
var s = emptySet (compare), i;
|
||||
|
||||
for i := 0, i < 100, i := i+1
|
||||
do
|
||||
|
|
@ -33,8 +33,8 @@ od;
|
|||
|
||||
printf ("List set: %s\n", internalOf (listSet ({1, 2, 3, 4, 5}, compare)).string);
|
||||
|
||||
{
|
||||
local u = union (listSet ({1, 2, 3, 4, 5}, compare), listSet ({11, 22, 33, 44, 55}, compare)), u1;
|
||||
(
|
||||
var u = union (listSet ({1, 2, 3, 4, 5}, compare), listSet ({11, 22, 33, 44, 55}, compare)), u1;
|
||||
|
||||
validateColl (u);
|
||||
|
||||
|
|
@ -46,5 +46,5 @@ printf ("List set: %s\n", internalOf (listSet ({1, 2, 3, 4, 5}, compare)).string
|
|||
|
||||
printf ("Set difference: %s\n", internalOf (u1).string);
|
||||
printf ("Elements: %s\n", elements (u1).string)
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import Matcher;
|
||||
|
||||
local m = initMatcher (" -- asdasdakm ,m.,msd .,m.,asd\n \n\n abc");
|
||||
var m = initMatcher (" -- asdasdakm ,m.,msd .,m.,asd\n \n\n abc");
|
||||
|
||||
local
|
||||
var
|
||||
lident = createRegexp ("[a-z][a-zA-Z_]*", "lowercase identifier"),
|
||||
uident = createRegexp ("[A-Z][a-zA-Z_]*", "uppercase identifier"),
|
||||
ws = createRegexp ("\\([ \t\n]\\|--[^\n]*\n\\)*", "whitespace"),
|
||||
|
|
@ -53,7 +53,7 @@ infixr || after |> (l, r) {
|
|||
}
|
||||
}
|
||||
|
||||
local expr = lid @ fun (s) {Lid (s)} || const @ fun (s) {Dec (s)},
|
||||
var expr = lid @ fun (s) {Lid (s)} || const @ fun (s) {Dec (s)},
|
||||
assn = lid |> fun (id) {token (":=") |> fun (s) {expr @ fun (e) {Assn (id, e)}}};
|
||||
|
||||
printf ("%s\n", case assn (initMatcher ("x:=3")) of Fail (err) -> err | Succ (s, _) -> s.string esac)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import Collection;
|
||||
|
||||
local s = emptyMap (compare), i;
|
||||
var s = emptyMap (compare), i;
|
||||
|
||||
for i := 0, i < 100, i := i+1
|
||||
do
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ fun f (x, y) {
|
|||
fun () {x+y}
|
||||
}
|
||||
|
||||
local t = emptyMemo (),
|
||||
var t = emptyMemo (),
|
||||
a = lookupMemo (t, "abc"),
|
||||
b = lookupMemo (t, [1, 2, 3, 4, "abc"]),
|
||||
c = lookupMemo (t, f (5, 6));
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import Collection;
|
||||
|
||||
local a = {1, 2, 3}, b = {1, 2, 3}, t = emptyHashTab (16, hash, compare);
|
||||
var a = {1, 2, 3}, b = {1, 2, 3}, t = emptyHashTab (16, hash, compare);
|
||||
|
||||
t := addHashTab (t, a, 100);
|
||||
printf ("HashTab internal structure: %s\n", internalOf (t).string);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import Fun;
|
||||
|
||||
local fact = fix (fun (self) {fun (n) {if n <= 1 then 1 else n * self (n-1) fi}});
|
||||
var fact = fix (fun (self) {fun (n) {if n <= 1 then 1 else n * self (n-1) fi}});
|
||||
|
||||
printf ("%d\n", fact (3));
|
||||
printf ("%d\n", fact (5));
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import Ostap;
|
||||
import Matcher;
|
||||
|
||||
local a = token ("a"), acc;
|
||||
var a = token ("a"), acc;
|
||||
|
||||
printf ("Parsing a*| against ""aa""... %s\n", parseString (rep0 (a) |> fun (x) {eof @ lift (x)}, "aa").string);
|
||||
printf ("Parsing a+| against ""aa""... %s\n", parseString (rep (a) |> fun (x) {eof @ lift (x)}, "aa").string);
|
||||
|
|
|
|||
|
|
@ -6,13 +6,13 @@ fun many (a) {
|
|||
memo (
|
||||
eta (
|
||||
empty @ lift({})
|
||||
| many (a) |> fun (as) {a @ fun (x) {as +++ singleton (x)}}
|
||||
| many (a) |> fun (as) {a @ fun (x) {as +++ {x}}}
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
local a = token ("a"), b = token ("b");
|
||||
local bad_alter = a | a |> fun (x) {b @ fun (y) {x ++ y}};
|
||||
var a = token ("a"), b = token ("b");
|
||||
var bad_alter = a | a |> fun (x) {b @ fun (y) {x ++ y}};
|
||||
|
||||
--logOn ();
|
||||
printf ("Parsing ""aaa"" with many ... %s\n", parseString (many (a) |> bypass (eof), "aaa").string);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import Ostap;
|
||||
import Fun;
|
||||
|
||||
local a = token ("a"),
|
||||
var a = token ("a"),
|
||||
add = [token ("+"), fun (l, _, r) {Add (l, r)}],
|
||||
sub = [token ("-"), fun (l, _, r) {Sub (l, r)}],
|
||||
mul = [token ("*"), fun (l, _, r) {Mul (l, r)}],
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ fun gen (depth) {
|
|||
fi
|
||||
}
|
||||
|
||||
local a = token ("a"),
|
||||
var a = token ("a"),
|
||||
add = [token ("+"), fun (l, _, r) {Add (l, r)}],
|
||||
sub = [token ("-"), fun (l, _, r) {Sub (l, r)}],
|
||||
mul = [token ("*"), fun (l, _, r) {Mul (l, r)}],
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import Ostap;
|
||||
import Fun;
|
||||
|
||||
local a = token ("a"),
|
||||
var a = token ("a"),
|
||||
add = [token ("+"), fun (l, _, r) {Add (l, r)}],
|
||||
sub = [token ("-"), fun (l, _, r) {Sub (l, r)}],
|
||||
mul = [token ("*"), fun (l, _, r) {Mul (l, r)}],
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@ import Ostap;
|
|||
import Fun;
|
||||
import List;
|
||||
|
||||
local a = token ("a"),
|
||||
var a = token ("a"),
|
||||
eq = [token ("="), fun (l, _, r) {Eq (l, r)}],
|
||||
add = [token ("+"), fun (l, _, r) {Add (l, r)}],
|
||||
sub = [token ("-"), fun (l, _, r) {Sub (l, r)}],
|
||||
mul = [token ("*"), fun (l, _, r) {Mul (l, r)}],
|
||||
div = [token ("/"), fun (l, _, r) {Div (l, r)}],
|
||||
exp = expr ({[Nona, singleton (eq)], [Right, {add, sub}], [Left, {mul, div}]}, a);
|
||||
exp = expr ({[Nona, {eq}], [Right, {add, sub}], [Left, {mul, div}]}, a);
|
||||
|
||||
printf ("%s\n", parseString (exp |> bypass (eof), "a+a-a").string);
|
||||
printf ("%s\n", parseString (exp |> bypass (eof), "a*a/a*a").string);
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@ import Ostap;
|
|||
import Fun;
|
||||
import List;
|
||||
|
||||
local a = token ("a"),
|
||||
var a = token ("a"),
|
||||
eq = [token ("="), fun (l, _, r) {Eq (l, r)}],
|
||||
add = [token ("+"), fun (l, _, r) {Add (l, r)}],
|
||||
sub = [token ("-"), fun (l, _, r) {Sub (l, r)}],
|
||||
mul = [token ("*"), fun (l, _, r) {Mul (l, r)}],
|
||||
div = [token ("/"), fun (l, _, r) {Div (l, r)}],
|
||||
exp = expr ({[Nona, singleton (eq)], [Right, {add, sub}], [Left, {mul, div}]}, a);
|
||||
exp = expr ({[Nona, {eq}], [Right, {add, sub}], [Left, {mul, div}]}, a);
|
||||
|
||||
printf ("%s\n", parseString (exp |> bypass (eof), "a=a").string);
|
||||
printf ("%s\n", parseString (exp |> bypass (eof), "a*a=a*a").string);
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@ import Ostap;
|
|||
import Fun;
|
||||
import List;
|
||||
|
||||
local a = token ("a") @ lift(fun (a) {if a then "a" else "b" fi}),
|
||||
var a = token ("a") @ lift(fun (a) {if a then "a" else "b" fi}),
|
||||
eq = [token ("="), fun (l, _, r) {fun (a) {Eq (l (a), r (a))}}],
|
||||
add = [token ("+"), fun (l, _, r) {fun (a) {Add (l (a), r (a))}}],
|
||||
sub = [token ("-"), fun (l, _, r) {fun (a) {Sub (l (a), r (a))}}],
|
||||
mul = [token ("*"), fun (l, _, r) {fun (a) {Mul (l (a), r (a))}}],
|
||||
div = [token ("/"), fun (l, _, r) {fun (a) {Div (l (a), r (a))}}],
|
||||
exp = expr ({[Nona, singleton (eq)], [Right, {add, sub}], [Left, {mul, div}]}, a);
|
||||
exp = expr ({[Nona, {eq}], [Right, {add, sub}], [Left, {mul, div}]}, a);
|
||||
|
||||
fun unpack (x, y) {
|
||||
case x of
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
local x = lazy (for local i; i := 0, i<10, i := i + 1 do printf ("Lazy body: %d\n", i) od; 100);
|
||||
var x = lazy (for var i; i := 0, i<10, i := i + 1 do printf ("Lazy body: %d\n", i) od; 100);
|
||||
|
||||
printf ("First force: %d\n", force (x));
|
||||
printf ("Second force: %d\n", force (x))
|
||||
|
|
@ -12,7 +12,7 @@ fun not (x) {
|
|||
}
|
||||
|
||||
fun test (a, b) {
|
||||
local f = normalize (a =?= b);
|
||||
var f = normalize (a =?= b);
|
||||
|
||||
printf ("%s =?= %s = %d\n", a.string, b.string, f);
|
||||
printf ("symmetricity: %s\n", if normalize (b =?= a) == not (f) then "ok" else "fail" fi)
|
||||
|
|
@ -37,8 +37,8 @@ test ([1, 2, 3], S (1, 2, 3));
|
|||
test ("abc", [1, 2, 3]);
|
||||
test (1, [1, 2, 3]);
|
||||
|
||||
{
|
||||
local a = [1], b = [1];
|
||||
(
|
||||
var a = [1], b = [1];
|
||||
|
||||
a [0] := a;
|
||||
b [0] := b;
|
||||
|
|
@ -62,4 +62,4 @@ test (1, [1, 2, 3]);
|
|||
b[0] := a;
|
||||
|
||||
printf ("%d\n", a =?= b)
|
||||
}
|
||||
)
|
||||
|
|
@ -9,7 +9,7 @@ fun insert (tree, value) {
|
|||
esac
|
||||
}
|
||||
|
||||
local i, tree = Empty;
|
||||
var i, tree = Empty;
|
||||
|
||||
for i := 0, i <= 10, i := i+1 do
|
||||
printf ("%s\n", tree.string);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fun collect_ints_acc (v, tail) {
|
||||
local i;
|
||||
var i;
|
||||
|
||||
case v of
|
||||
a@#val -> Cons (a, tail)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
local lists = [
|
||||
var lists = [
|
||||
{},
|
||||
{1, 2, 3, 4},
|
||||
{1 : {}, {2, 3}, {4, {5, 6}}},
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ printf ("Cloning string: %s\n", clone ("abc"));
|
|||
printf ("Cloning array: %s\n", clone ([1, 2, 3, 4, 5]).string);
|
||||
printf ("Cloning sexp: %s\n", clone (A (1, 2, 3, 4, 5)).string);
|
||||
|
||||
{
|
||||
local c = f (5, 6), cc = clone (c);
|
||||
(
|
||||
var c = f (5, 6), cc = clone (c);
|
||||
|
||||
printf ("Cloning closure: address %s, %d, %d\n", if cc[0] == c[0] then "ok" else "fail" fi, c[1], c[2])
|
||||
}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
local i;
|
||||
var i;
|
||||
|
||||
printf ("Number of commands-line arguments: %d\n", sysargs.length);
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ fun pure(v) {
|
|||
empty @ lift(v)
|
||||
}
|
||||
|
||||
local parse =
|
||||
var parse =
|
||||
token(".") |> fun(e1) {
|
||||
token(".") |> fun(e2) {
|
||||
pure(Dot(e1, e2)) }};
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
local sq = syntax (e1=token ["a"] e2=token ["b"] {Seq (e1, e2)}),
|
||||
var sq = syntax (e1=token ["a"] e2=token ["b"] {Seq (e1, e2)}),
|
||||
al = syntax (e=(token ["a"] | token ["b"]) {Alt (e)}),
|
||||
rp = syntax (e=token ["a"]* {Rep (e)});
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
local sq = syntax (e1=token ["a"] e2=token ["b"] {Seq (e1, e2)}),
|
||||
var sq = syntax (e1=token ["a"] e2=token ["b"] {Seq (e1, e2)}),
|
||||
al = syntax (e=(token ["a"] | token ["b"]) {Alt (e)}),
|
||||
rp = syntax (e=token ["a"]* {Rep (e)});
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import Fun;
|
|||
import Data;
|
||||
|
||||
fun genCyclicArrays (n, eq, cross) {
|
||||
local f = ref (true);
|
||||
var f = ref (true);
|
||||
|
||||
fun genrec (n, stacka, stackb, depth) {
|
||||
fun peek (k, stack) {
|
||||
|
|
@ -24,14 +24,14 @@ fun genCyclicArrays (n, eq, cross) {
|
|||
x -> [x, clone (x)]
|
||||
esac
|
||||
else
|
||||
local a = split (n, random (n+1)),
|
||||
var a = split (n, random (n+1)),
|
||||
b = mapArray (id, a),
|
||||
index = initArray (random (a.length + 1), fun (_) {random (a.length)});
|
||||
|
||||
fun shared (i) {
|
||||
local found = false;
|
||||
var found = false;
|
||||
|
||||
for local j=0;, j < index.length && 1 - found, j := j + 1
|
||||
for var j=0;, j < index.length && 1 - found, j := j + 1
|
||||
do
|
||||
found := i == index[j]
|
||||
od;
|
||||
|
|
@ -39,7 +39,7 @@ fun genCyclicArrays (n, eq, cross) {
|
|||
found
|
||||
}
|
||||
|
||||
for local i=0;, i < a.length, i := i + 1
|
||||
for var i=0;, i < a.length, i := i + 1
|
||||
do
|
||||
if shared (i)
|
||||
then
|
||||
|
|
@ -89,7 +89,7 @@ fun not (x) {0 - x}
|
|||
|
||||
disableGC ();
|
||||
|
||||
for local i=0;, i<25, i:=i+1
|
||||
for var i=0;, i<25, i:=i+1
|
||||
do
|
||||
case genCyclicArrays (1000, true, false) of
|
||||
[a, b] ->
|
||||
|
|
@ -98,7 +98,7 @@ do
|
|||
esac
|
||||
od;
|
||||
|
||||
for local i=0;, i<25, i:=i+1
|
||||
for var i=0;, i<25, i:=i+1
|
||||
do
|
||||
case genCyclicArrays (1000, true, true) of
|
||||
[a, b] ->
|
||||
|
|
@ -107,19 +107,19 @@ do
|
|||
esac
|
||||
od;
|
||||
|
||||
for local i=0;, i<25, i:=i+1
|
||||
for var i=0;, i<25, i:=i+1
|
||||
do
|
||||
case genCyclicArrays (1000, false, false) of
|
||||
[a, b] -> local x = normalize (a =?= b);
|
||||
[a, b] -> var x = normalize (a =?= b);
|
||||
printf ("%d\n", x != 0);
|
||||
printf ("%d\n", not (x) == normalize (b =?= a))
|
||||
esac
|
||||
od;
|
||||
|
||||
for local i=0;, i<25, i:=i+1
|
||||
for var i=0;, i<25, i:=i+1
|
||||
do
|
||||
case genCyclicArrays (1000, false, true) of
|
||||
[a, b] -> local x = normalize (a =?= b);
|
||||
[a, b] -> var x = normalize (a =?= b);
|
||||
printf ("%d\n", x != 0);
|
||||
printf ("%d\n", not (x) == normalize (b =?= a))
|
||||
esac
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue