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.43Code: Select all
(time (merge (sequence 1 500) (sequence 1 200) <) 500)
;-> 2234.945Code: 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.992More: 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.979Thanks.
System: Windows 10 Pro 64bit - newLISP 10.7.5 64bit-utf8