mirror of
https://github.com/ProgramSnail/Lama.git
synced 2025-12-06 06:48:48 +00:00
emptyCustomMap
This commit is contained in:
parent
695ddc7d88
commit
8cddb126b9
4 changed files with 20 additions and 10 deletions
|
|
@ -1 +1 @@
|
||||||
let path = "/home/db/.opam/ocaml-system.4.07.1/share/Lama"
|
let path = "/home/db/.opam/4.07.1+fp/share/Lama"
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
let version = "Version 1.00, 674214cea, Sat Oct 31 02:17:44 2020 +0300"
|
let version = "Version 1.00, 695ddc7d8, Sat Oct 31 02:59:20 2020 +0300"
|
||||||
|
|
|
||||||
|
|
@ -295,26 +295,36 @@ public fun foldSet (f, acc, s) {
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Hash consing
|
-- Hash consing
|
||||||
public fun emptyMemo () {
|
public fun emptyCustomMemo (pred, compare) {
|
||||||
ref (emptyMap (compare))
|
[pred, emptyMap (compare)]
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun lookupMemo (m, v) {
|
public fun emptyMemo () {
|
||||||
|
-- ref (emptyMap (compare))
|
||||||
|
emptyCustomMemo ({}, compare)
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun lookupMemo (mm@[p, m], v) {
|
||||||
|
case p of
|
||||||
|
#fun -> if p (v) then return v fi
|
||||||
|
| _ -> skip
|
||||||
|
esac;
|
||||||
|
|
||||||
case v of
|
case v of
|
||||||
#unboxed -> v
|
#unboxed -> v
|
||||||
| _ ->
|
| _ ->
|
||||||
case findMap (deref (m), v) of
|
case findMap (m, v) of
|
||||||
Some (w) -> w
|
Some (w) -> w
|
||||||
| None ->
|
| None ->
|
||||||
case v of
|
case v of
|
||||||
#string -> m ::= addMap (deref (m), v, v); v
|
#string -> mm[1] := addMap (m, v, v); v
|
||||||
| _ ->
|
| _ ->
|
||||||
local vc = clone (v), i = case vc of #fun -> 1 | _ -> 0 esac;
|
local vc = clone (v), i = case vc of #fun -> 1 | _ -> 0 esac;
|
||||||
for skip, i < v.length, i := i + 1 do
|
for skip, i < v.length, i := i + 1 do
|
||||||
local vci = lookupMemo (m, vc [i]);
|
local vci = lookupMemo (mm, vc [i]);
|
||||||
vc [i] := vci
|
vc [i] := vci
|
||||||
od;
|
od;
|
||||||
m ::= addMap (deref (m), vc, vc);
|
mm [1] := addMap (m, vc, vc);
|
||||||
vc
|
vc
|
||||||
esac
|
esac
|
||||||
esac
|
esac
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ public fun logOn () {
|
||||||
|
|
||||||
public fun initOstap () {
|
public fun initOstap () {
|
||||||
tab := ref (emptyHashTab (1024, hash, compare));
|
tab := ref (emptyHashTab (1024, hash, compare));
|
||||||
restab := emptyMemo ();
|
restab := emptyCustomMemo (fun (x) {case x of #string -> true | _ -> false esac}, compare);
|
||||||
hct := emptyMemo ()
|
hct := emptyMemo ()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue