Double list size each time; neat demo.

This commit is contained in:
Simon Forman 2023-02-16 11:42:17 -08:00
parent 823c53308c
commit a6a2c2d955
1 changed files with 17 additions and 14 deletions

View File

@ -64,13 +64,13 @@ def cons(thing, vlist_ptr):
''' '''
# Is this where we increase the size x 2? # Is this where we increase the size x 2?
# size <<= 1 ; l = [None] * size ; l[0] = thing size <<= 1 ; l = [None] * size ; l[0] = thing
# return (vlist_ptr[0], pointer_offset, size, [1], l), 0 return (vlist_ptr[0], pointer_offset, size, [1], l), 0
return (vlist_ptr[0], pointer_offset, 1, [1], [thing]), 0 #return (vlist_ptr[0], pointer_offset, 1, [1], [thing]), 0
p3 = cons(10, p0) #p3 = cons(10, p0)
def head(vlist_ptr): def head(vlist_ptr):
@ -94,18 +94,21 @@ def iter_vlist(vlist_ptr):
vlist_ptr = tail(vlist_ptr) vlist_ptr = tail(vlist_ptr)
for i, p in enumerate((p0, p1, p2, p3)): ##for i, p in enumerate((p0, p1, p2, p3)):
print(f'p{i}') ## print(f'p{i}')
print(' '.join(map(str, iter_vlist(p)))) ## print(' '.join(map(str, iter_vlist(p))))
print() ## print()
p = () p = ()
p = cons(3, p) p = cons(3, p) ; print(p)
p = cons(4, p) p = cons(4, p) ; print(p)
p = cons(5, p) p = cons(5, p) ; print(p)
p = cons(6, p) p = cons(6, p) ; print(p)
p = cons(7, p) p = cons(7, p) ; print(p)
p = cons(8, p) p = cons(8, p) ; print(p)
print(' '.join(map(str, iter_vlist(p)))) print(' '.join(map(str, iter_vlist(p))))
assert p[0] == o3
# There is no such thing as a vlist_ptr with a null () vlist. That's an invariant. # There is no such thing as a vlist_ptr with a null () vlist. That's an invariant.