mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-23 20:15:05 +02:00
64 lines
3.5 KiB
Text
64 lines
3.5 KiB
Text
Original version of dec-to1:
|
|
(lambda (k41 n4)
|
|
(let ((k42 (##core#lambda (r43) (k41 r43))))
|
|
(let ((loop5 (##core#undefined)))
|
|
(let ((t45 (set! loop5
|
|
(lambda (k47 i6 l7)
|
|
(let ((k48 (##core#lambda (r49) (k47 r49))))
|
|
(let ((k51 (##core#lambda (r52)
|
|
(if r52
|
|
(k48 l7)
|
|
(let ((k54 (##core#lambda (r55) (k48 r55))))
|
|
(let ((k58 (##core#lambda (r59)
|
|
(let ((a57 r59))
|
|
(let ((k62 (##core#lambda (r63)
|
|
(let ((a61 r63)) (loop5 k54 a57 a61)))))
|
|
(cons k62 i6 l7))))))
|
|
(- k58 i6 '1)))))))
|
|
(= k51 i6 '0)))))))
|
|
(let ((t8 t45)) (loop5 k42 n4 '()))))))
|
|
call site was (dec-to1 k189 n0)
|
|
|
|
Optimized version, replaces call site:
|
|
|
|
(let ((k41 k189))
|
|
(let ((n4 n0))
|
|
(let ((loop5 (##core#undefined)))
|
|
(let ((t45 (set! loop5
|
|
(lambda (k47 i6 l7)
|
|
(let ((k51 (##core#lambda (r52)
|
|
(if r52
|
|
(k47 l7)
|
|
(let ((k58 (##core#lambda (r59)
|
|
(let ((k62 (##core#lambda (r63) (loop5 k47 r59 r63))))
|
|
(cons k62 i6 l7)))))
|
|
(- k58 i6 '1))))))
|
|
(= k51 i6 '0))))))
|
|
(loop5 k41 n4 '())))))
|
|
|
|
optimized code from cyclone's nqueens:
|
|
|
|
((define nqueens (lambda (k$30 n$4) ((lambda (dec-to$10 ok?$9 try$8) ((lambda (dec-to$13 try$12 ok?$11) ((lambda (r$67) ((lambda (r$31) ((lambda (r$50) ((lambda (r$32) ((lambda (r$37) ((lambda (r$33) (dec-to$10 (lambda (r$34) ((lambda (r$35) ((lambda (r$36) (try$8 k$30 r$34 r$35 r$36)) (quote ()))) (quote ()))) n$4)) (set! ok?$9 r$37))) (lambda (k$38 row$16 dist$15 placed$14) ((lambda (r$39) (if r$39 (k$38 #t) ((lambda (r$48) ((lambda (r$49) ((lambda (r$47) (not (lambda (r$40) (if r$40 ((lambda (r$45) ((lambda (r$46) ((lambda (r$44) (not (lambda (r$41) (if r$41 ((lambda (r$42) ((lambda (r$43) (ok?$9 k$38 row$16 r$42 r$43)) (cdr placed$14))) (+ dist$15 1)) (k$38 #f))) r$44)) (= r$45 r$46))) (- row$16 dist$15))) (car placed$14)) (k$38 #f))) r$47)) (= r$48 r$49))) (+ row$16 dist$15))) (car placed$14)))) (null? placed$14))))) (set! try$8 r$50))) (lambda (k$51 x$19 y$18 z$17) ((lambda (r$52) (if r$52 ((lambda (r$53) (if r$53 (k$51 1) (k$51 0))) (null? y$18)) ((lambda (k$59) ((lambda (r$66) (ok?$9 (lambda (r$60) (if r$60 ((lambda (r$65) (append (lambda (r$61) ((lambda (r$62) ((lambda (r$64) ((lambda (r$63) (try$8 k$59 r$61 r$62 r$63)) (cons r$64 z$17))) (car x$19))) (quote ()))) r$65 y$18)) (cdr x$19)) (k$59 0))) r$66 1 z$17)) (car x$19))) (lambda (r$54) ((lambda (r$56) ((lambda (r$58) ((lambda (r$57) (try$8 (lambda (r$55) (k$51 (+ r$54 r$55))) r$56 r$57 z$17)) (cons r$58 y$18))) (car x$19))) (cdr x$19)))))) (null? x$19))))) (set! dec-to$10 r$67))) (lambda (k$68 n$20) ((lambda (r$69) ((lambda (i$22 l$21) ((lambda (loop$23) ((lambda (r$71) ((lambda (r$70) (loop$23 k$68 i$22 l$21)) (set! loop$23 r$71))) (lambda (k$72 i$25 l$24) ((lambda (r$73) (if r$73 (k$72 l$24) ((lambda (r$74) ((lambda (r$75) (loop$23 k$72 r$74 r$75)) (cons i$25 l$24))) (- i$25 1)))) (= i$25 0))))) #f)) n$20 r$69)) (quote ()))))) #f #f #f)) #f #f #f))) ((lambda () ((lambda (r$26) (nqueens (lambda (r$27) (write %halt r$27)) 8)) 0))))
|
|
|
|
|
|
------------------------------------
|
|
Before:
|
|
|
|
(let ((k158 (##core#lambda (r159)
|
|
(let ((a157 r159)) (ok?3 k150 row12 a153 a157)))))
|
|
(cdr k158 placed14))
|
|
|
|
After (???):
|
|
|
|
(let ((k158 (##core#lambda (r159)
|
|
(ok?3 k131 row12 r155 r159))))
|
|
(cdr k158 placed14))
|
|
|
|
Not sure if this is the same optimization, but an anonymous lambda was removed. Or maybe not, isn't this the optimization we already did?
|
|
|
|
((lambda (r$42)
|
|
((lambda (r$43) (ok?$9 k$38 row$16 r$42 r$43))
|
|
(cdr placed$14)))
|
|
(+ dist$15 1))
|
|
|
|
((lambda (r$42) ((lambda (r$43) (ok?$9 k$38 row$16 r$42 r$43)) (cdr placed$14))) (+ dist$15 1))
|