| Paste number 66055: | Maybe this will work |
| Pasted by: | cky |
| When: | 10 months, 4 days ago |
| Share: | Tweet this! | http://paste.lisp.org/+1EYV |
| Channel: | #guile |
| Paste contents: |
(define (save f)
(let loop ((env (filter pair? (procedure-environment f)))
(src (procedure-source f)))
(if (null? env)
(begin
(write src)
(newline))
(loop (cdr env)
`(let ,(zip (caar env) (cdar env)) ,src)))))
Annotations for this paste:
| Annotation number 6: | Filterless origami :-) |
| Pasted by: | cky |
| When: | 10 months, 4 days ago |
| Share: | Tweet this! | http://paste.lisp.org/+1EYV#6 |
| Paste contents: |
(define (save f)
(write (fold (lambda (bs acc)
(cond
((list? bs) `(let ,(zip (car bs) (cdr bs)) ,acc))
((pair? bs) `(let ((,(car bs) ,(cdr bs))) ,acc))
(else acc)))
(procedure-source f)
(procedure-environment f)))
(newline))
| Annotation number 5: | a version using fold |
| Pasted by: | Kayden |
| When: | 10 months, 4 days ago |
| Share: | Tweet this! | http://paste.lisp.org/+1EYV#5 |
| Paste contents: |
(define (save f)
(let ((env (filter pair? (procedure-environment f)))
(src (procedure-source f)))
(write (fold (lambda (bs acc)
(cond
((list? bs) `(let ,(zip (car bs) (cdr bs)) ,acc))
((pair? bs) `(let ((,(car bs) ,(cdr bs))) ,acc))
(else acc)))
src env))
(newline)))| Annotation number 4: | A filter-less version :-) |
| Pasted by: | cky |
| When: | 10 months, 4 days ago |
| Share: | Tweet this! | http://paste.lisp.org/+1EYV#4 |
| Paste contents: |
(define (save f)
(let loop ((env (procedure-environment f))
(src (procedure-source f)))
(cond
((null? env)
(write src)
(newline))
((pair? (car env))
(let ((keys (caar env))
(vals (cdar env)))
(loop (cdr env)
`(let ,(if (list? keys) (zip keys vals)
`((,keys ,vals))) ,src))))
(else
(loop (cdr env) src)))))
| Annotation number 3: | Much better |
| Pasted by: | cky |
| When: | 10 months, 4 days ago |
| Share: | Tweet this! | http://paste.lisp.org/+1EYV#3 |
| Paste contents: |
(define (save f)
(let loop ((env (filter pair? (procedure-environment f)))
(src (procedure-source f)))
(if (null? env)
(begin
(write src)
(newline))
(let ((keys (caar env))
(vals (cdar env)))
(loop (cdr env)
`(let ,(if (list? keys) (zip keys vals)
`((,keys ,vals))) ,src))))))
| Annotation number 2: | this works too :) |
| Pasted by: | Kayden |
| When: | 10 months, 4 days ago |
| Share: | Tweet this! | http://paste.lisp.org/+1EYV#2 |
| Paste contents: |
(use-modules (srfi srfi-1))
(define (save f)
(let ((env (filter pair? (procedure-environment f)))
(src (procedure-source f)))
(write `(let ,(concatenate (map (lambda (p) (if (list? p) (zip (car p) (cdr p)) (list (list (car p) (cdr p))))) env)) ,src))
(newline)))
;; tests:
(define (foo x y) (lambda (a b) (lambda (c d) (+ x y a b c d))))
(define bar ((foo 1 2) 3 4))
;; guile> (save (let ((z 15)) (let ((y 14)) (lambda (x) (+ x y)))))
;; (let ((y 14) (z 15)) (lambda (x) (+ x y)))
;; guile> (save (let ((y 14)) (lambda (x) (+ x y))))
;; (let ((y 14)) (lambda (x) (+ x y)))
;; guile> (save (let ((y 14) (z 15)) (lambda (x) (+ x y))))
;; (let ((z 15) (y 14)) (lambda (x) (+ x y)))
;; guile> (save bar)
;; (let ((a 3) (b 4) (x 1) (y 2)) (lambda (c d) (+ x y a b c d)))
| Annotation number 1: | This will work better :-) |
| Pasted by: | cky |
| When: | 10 months, 4 days ago |
| Share: | Tweet this! | http://paste.lisp.org/+1EYV#1 |
| Paste contents: |
(define (save f)
(let loop ((env (filter pair? (procedure-environment f)))
(src (procedure-source f)))
(if (null? env)
(begin
(write src)
(newline))
(let ((keys (caar env))
(vals (cdar env)))
(loop (cdr env)
`(let ,((if (list? keys) zip list) keys vals) ,src))))))