Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (define cheatbot
- '(lambda (x)
- ;; Payload
- (define sub
- '(lambda (this)
- ;; give me my source code
- (define quine-my-source
- (quasiquote (lambda (x)
- (define sub (quote (unquote this)))
- (define ns (make-base-namespace))
- (namespace-set-variable-value! 'cn (current-namespace) #t ns)
- ((eval sub ns) sub))))
- ;; If eval is used on anything other than my code, return cooperatebot
- (define (evil expr [ns cn])
- (if (or (equal? expr this) (equal? expr quine-my-source))
- (eval expr ns)
- (lambda (...) 'C)))
- ;; Replace eval in the REPL namespace with my evil version
- (namespace-set-variable-value! 'eval evil #t cn)
- 'D))
- (define ns (make-base-namespace))
- (namespace-set-variable-value! 'cn (current-namespace) #t ns)
- ((eval sub ns) sub)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement