Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (setq lexical-binding t)
- (defun rev (l)
- (if (null (cdr l))
- (lambda (f) (cons (car l) (funcall f)))
- (lambda (x) (funcall (rev (cdr l)) x))))
- (funcall (rev '(1 2 3)))
- (defun re0 (l)
- (cond ((null l) (error "wat"))
- ((null (cdr l)) (lambda (x) (cons (car l) (funcall x))))
- (t (lambda (x) (funcall (re0 (cdr l)) (lambda () (car l)))))))
- (re0 '())
- (re0 '(1))
- (re0 '(1 2))
- (defun re1 (l)
- (cond ((null l) (error "wat"))
- ((null (cdr l)) (lambda (x) (cons (car l) (funcall x))))
- (t (lambda (x) (funcall (rev (cdr l)) (lambda () (cons (car l) (funcall x))))))))
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ^--- TYPO !
- (funcall (re1 '(1)) (lambda () nil)) ;; => (1)
- (funcall (re1 '(1 2)) (lambda () nil)) ;; => (2 1)
- (funcall (re1 '(1 2 3)) (lambda () nil)) ;; => (3 1)
- (funcall (re1 '(1 2 3 4)) (lambda () nil)) ;; => (4 1)
- (defun re2 (l)
- (cond ((null l) (error "wat"))
- ((null (cdr l)) (lambda (x) (cons (car l) (funcall x))))
- (t (lambda (x) (funcall (re2 (cdr l)) (lambda () (cons (car l) (funcall x))))))))
- (funcall (re2 '(1)) (lambda () nil)) ;; => (1)
- (funcall (re2 '(1 2)) (lambda () nil)) ;; => (2 1)
- (funcall (re2 '(1 2 3)) (lambda () nil)) ;; => (3 2 1)
- (funcall (re2 '(1 2 3 4)) (lambda () nil)) ;; => (4 3 2 1)
- ;;; WIN
Add Comment
Please, Sign In to add comment