Code: Select all
(define (merge lstA lstB op)
(define (ciclo out lstA lstB)
(cond ((null? lstA) (extend (reverse out) lstB))
((null? lstB) (extend (reverse out) lstA))
((op (first lstB) (first lstA))
(ciclo (cons (first lstB) out) lstA (rest lstB)))
(true
(ciclo (cons (first lstA) out) (rest lstA) lstB))))
(ciclo '() lstA lstB)
)
Code: Select all
(setq A '(1 2 3 4 5 6 7 8))
(setq B '(2 3 4 5 11 12 13))
(merge A B <)
;-> (1 2 3 4 4 5 5 6 7 8 11 12 13 18 19)
Code: Select all
(setq C '(4 3 2))
(setq D '(8 5 3 1))
(merge C D >)
;-> (8 5 4 3 3 2 1)
Code: Select all
(time (merge (sequence 1 500) (sequence 1 200) <) 500)
;-> 1751.43
Code: Select all
(time (merge (sequence 1 500) (sequence 1 200) <) 500)
;-> 2234.945
Code: Select all
(time (merge (sequence 1 500) (sequence 1 200) <) 500)
;-> 2672.319:
Code: Select all
(time (merge (sequence 1 500) (sequence 1 200) <) 500)
;-> 3015.992
More: raising an error on REPL reset the problem
For example, type the following on REPL:
Code: Select all
and again:
;-> and@4098B4
;-> ERR: symbol expected : " again:"
Code: Select all
(time (merge (sequence 1 500) (sequence 1 200) <) 500)
;-> 1750.432
(time (merge (sequence 1 500) (sequence 1 200) <) 500)
;-> 2218.979
Thanks.
System: Windows 10 Pro 64bit - newLISP 10.7.5 64bit-utf8