build_visitor fixed, going to test it

This commit is contained in:
ProgramSnail 2023-04-25 21:21:36 +03:00
parent 5bf0c1bf48
commit c34523bd4f
23 changed files with 45468 additions and 45273 deletions

View file

@ -5,39 +5,40 @@ decl fib : Int -> Int
def fib : n =
match n with
| 0 | 1 -> 1
| _ -> fib (n - 1) + fib n
| n ? n > 1 -> fib (n - 1) + fib n
| _ -> error "n must be positive"
decl fact : Int -> Int
def fact : n =
match n with
| 0 -> 1
| n -> n * fact (n - 1)
| n ? n > 0 -> n * fact (n - 1)
| _ -> error "n must be positive"
decl find_prefix_hashes ('H : (#AccHash Char)) : String -> Array 'H
decl find_prefix_hashes ('H : (#AccHash Char)) : String -> (Array 'H)
def find_prefix_hashes 'H : str = {
var hashes = (Array 'H).new (str.size + 1)
var hashes = (Array 'H).new (str.size () + 1)
; hashes.0 = 'H.of str.0
for i in 1..hashes.size do {
; hashes.i = hashes.(i - 1).clone
; hashes.i.append str.i
; hashes:0 = 'H.of str:0
for i in 1..hashes.size () do {
; hashes:i = hashes:(i - 1)
; hashes:i.append str:i
}
return hashes
}
alias Hash = AccHash Char
alias Hash = (AccHash Char)
decl find_substring : String -> String -> Array Index
decl find_substring : String -> String -> (Array Index)
def find_substring : str substr = {
var result = (Array Index).empty
var result = (Array Index).empty ()
const str_hashes = find_prefix_hashes Hash str
const substr_hash = Hash.of substr
for i in 0..(str_hashes.size - substr.size) do {
const part_hash = Hash.diff str_hashes.(i + substr.size) str_hashes.i
for i in 0..(str_hashes.size () - substr.size ()) do {
const part_hash = Hash.diff str_hashes:(i + substr->size ()) str_hashes:i
if part_hash == substr_hash then {
; result.push i
@ -48,8 +49,7 @@ def find_substring : str substr = {
}
decl is_empty : Unit -> Bool
def is_empty =
return 0
def is_empty = 0
decl do_something : Unit -> Unit
def do_something =