OSDN Git Service

Minor cleanup.
authorSimon Forman <sforman@hushmail.com>
Thu, 16 Feb 2023 21:36:31 +0000 (13:36 -0800)
committerSimon Forman <sforman@hushmail.com>
Thu, 16 Feb 2023 21:36:31 +0000 (13:36 -0800)
vlist.py

index 299309a..f4d49bc 100644 (file)
--- a/vlist.py
+++ b/vlist.py
@@ -78,36 +78,27 @@ def repr_vlist(vlist_ptr):
 
 
 def pick(n, vlist_ptr):
-    if not vlist_ptr:
-        raise ValueError("Empty list!")
-
     '''
     Consider starting with a list pointer in Fig 1 then to find the nth
     element subtract n from the pointer offset. If the result is positive
     then the element is in the first block of the list at the calculated
-    offset from the base. If the result is negative then...
+    offset from the base. If the result is negative then move to the next
+    block using the Base-Offset pointer. Add the Previous pointer offset
+    to the negative offset. While this remains negative keep moving onto
+    the next block. When it finally becomes positive the position of the
+    required element has been found
     '''
-
+    assert n >= 0
+    if not vlist_ptr:
+        raise ValueError("Empty list!")
     vlist, pointer_offset = vlist_ptr
     q = pointer_offset - n
-    if q >= 0:
-        return vlist[-1][q]
-
-    '''
-    ...move to the next block using the Base-Offset pointer. Add the
-    Previous pointer offset to the negative offset. While this remains
-    negative keep moving onto the next block. When it finally becomes
-    positive the position of the required element has been found
-    '''
-
-    while True:
-        assert q < 0
+    while q < 0:
         if not vlist:
             raise ValueError(f'Pick index {n} greater than length of list.')
         vlist, offset = vlist[:2]
         q += offset + 1  # Offsets in the paper count from one, not zero?
-        if q >= 0:
-            return vlist[-1][q]
+    return vlist[-1][q]
 
 
 def length(vlist_ptr):
@@ -134,7 +125,7 @@ print(repr_vlist(p))
 for n in range(length(p)):
        print(pick(n, p), end=' ')
 
-
+print()