aboutsummaryrefslogtreecommitdiff
path: root/libs/sort.neb
diff options
context:
space:
mode:
authormryouse2022-07-15 23:03:08 +0000
committermryouse2022-07-15 23:03:08 +0000
commit5346ededce048d4baae16acdd5b3092d8a004890 (patch)
tree245c5b4ebcf75bda9dfcd308279b17546fca566a /libs/sort.neb
parent3a3c8930adfebb5078c7862b59a6864c074f0655 (diff)
use built-in prepend and use more reduce
Diffstat (limited to 'libs/sort.neb')
-rw-r--r--libs/sort.neb21
1 files changed, 14 insertions, 7 deletions
diff --git a/libs/sort.neb b/libs/sort.neb
index e5a7eb5..b8f324b 100644
--- a/libs/sort.neb
+++ b/libs/sort.neb
@@ -1,9 +1,6 @@
; sort.neb
; an exploration of sorting algorithms in neb
-(func .prepend (lst item)
- (list-reverse (append (list-reverse lst) item)))
-
(func bubble (lst)
(def orig lst)
(def working (list))
@@ -16,7 +13,7 @@
(block
(redef swp #true)
(redef working (append working (first (rest orig))))
- (redef orig (.prepend (rest (rest orig)) (first orig)))))
+ (redef orig (prepend (rest (rest orig)) (first orig)))))
(#true
(block
(redef working (append working (first orig)))
@@ -27,6 +24,12 @@
(bubble working)
working))
+(func insertion-reduce (lst)
+ (reduce insert lst (list)))
+
+(func extend-reduce (lst1 lst2)
+ (reduce append lst2 lst1))
+
(func extend (lst1 lst2)
(def ret lst1)
(for-each lst2
@@ -34,10 +37,14 @@
ret)
(func insert (lst item)
- (extend
+ (extend-reduce
(append (take-while lst (< _item_ item)) item)
(drop-while lst (< _item_ item))))
+(func insertion-reduce (lst)
+ (reduce insert lst (list)))
+
+
(func insertion (lst)
(def ret (list))
(for-each lst
@@ -103,11 +110,11 @@
(redef before (append before (first consider)))
(redef consider (rest consider)))
(block
- (redef after (.prepend after (first consider)))
+ (redef after (prepend after (first consider)))
(if (eq? 1 (list-length consider))
(redef consider (list))
(redef consider
- (.prepend (list-reverse (rest (list-reverse (rest consider)))) (last consider))))))
+ (prepend (list-reverse (rest (list-reverse (rest consider)))) (last consider))))))
(print (concat "before: " (->string before)))
(print (concat "after: " (->string after)))
(print (concat "consider: " (->string consider))))