99 ways

Each of the following Racket expressions evaluates to the list '(I love you) :

;;; '(I love you) ;;; (quote (I love you)) ;;; (list 'I 'love 'you) ;;; (list (quote I) (quote love) (quote you)) ;;; (cons 'I (cons 'love (cons 'you '()))) ;;; (cons 'I (cons 'love (list 'you))) ;;; (cons 'I (list 'love 'you)) ;;; (cons 'I '(love you)) ;;; '(I love . (you)) ;;; '(I . (love . (you))) ;;; '(I . (love . (you . ()))) ;;; '(I . (love you)) ;;; `(I love you) ;;; `(I ,'love you) ;; (quasiquote (I ,'love you)) ;; (quasiquote (I (unquote 'love) you)) ;;; `(I ,`love you) ;;; (let ([verb 'love]) `(I ,verb you)) ;;; `(I ,(string->symbol "love") you) ;;; `(I ,(string->symbol (list->string '(#\l #\o #\v #\e))) you) ;;; `(I love . (you)) ;;; `(I love . ,(list 'you)) ;;; `(I love ,@'(you)) ;;; `(I love (unquote-splicing '(you))) ;;; `(I ,@(list 'love 'you)) ;;; `(,@(list 'I 'love) you) ;;; `(,@'(I love you)) ;;; `,'(I love you) ;;; `(I love you . ,'()) ;;; (car (list '(I love you))) ;;; (cdr '(Hark! I love you)) ;;; (let ([words '(love you I)]) (list (car (cdr (cdr words))) (car words) (car (cdr words)))) ;;; (let ([words '(love you I)]) (list (caddr words) (car words) (cadr words))) ;;; (let* ([c '(you)] [b (cons 'love c)] [a (cons 'I b)]) a) ;;; (let () '(I love you not) '(I love you)) ;;; (vector->list (vector 'I 'love 'you)) ;;; (vector->list #(I love you)) ;;; (stream->list (stream 'I 'love 'you)) ;;; ((lambda args args) 'I 'love 'you) ;;; ((lambda (one two . rest) rest) 'You 'believe 'I 'love 'you) ;;; ((lambda (a c b) (list a b c)) 'I 'you 'love) ;;; (apply (lambda (a c b) (list a b c)) (list 'I 'you 'love)) ;;; ((lambda (a b [c 'you]) (list a b c)) 'I 'love) ;;; ((lambda (#:foo b #:bar c #:baz a) (list a b c)) #:baz 'I #:bar 'you #:foo 'love) ;;; ((lambda (a b #:key [c 'me]) (list a b c)) #:key 'you 'I 'love) ;;; (let ([f (λ (x) (λ (y) (λ (z) (list x y z))))]) (((f 'I) 'love) 'you)) ;;; (let ([f (case-lambda [() 'I] [(x) 'love] [(x y) 'you])]) (list (f) (f 1) (f 1 2))) ;;; (append '(I love) '(you)) ;;; (append '(I) '(love) '(you)) ;;; (flatten '((I) (love you))) ;;; (flatten '((I) (love) (you) ())) ;;; (reverse '(you love I)) ;;; (remove 'cannot '(I cannot love you)) ;;; (remove-duplicates '(I love love love you)) ;;; (take '(I love you not) 3) ;; (take-right '(I think I love you) 3) ;;; (drop '(She knows I love you) 2) ;;; (drop-right '(I love you no more) 2) ;;; (map (lambda (x) (if (eq? x 'hate) 'love x)) '(I hate you)) ;;; (map (λ (i) (vector-ref #(love you I) i)) '(2 0 1)) ;;; (map (λ (k) (hash-ref #hash(("foo" . I) ("baz" . you) ("bar" . love)) k)) '("foo" "bar" "baz")) ;;; (map string->symbol (sort (list "love" "you" "I") string<?)) ;;; (map string->symbol (string-split "I-love-you" "-")) ;;; (flatten (map (λ (a b) (cons a b)) '(I love you) '(() () ()))) ;;; (filter (lambda (x) (not (eq? x 'cannot))) '(I cannot love you)) ;;; (foldr cons '() '(I love you)) ;;; (foldl cons '() '(you love I)) ;;; (for/list ([word #(I love you)]) word) ;;; (cond [(even? 3) '(Not me)] [(odd? 3) '(I love you)]) ;;; (cond [(even? 3) '(Not me)] [(odd? 2) '(Nor I)] [else '(I love you)]) ;;; (case 1 [(a b c) '(Not me)] [(3 2 1) '(I love you)]) ;;; (match #t [#f '(Not me)] [#t '(I love you)]) ;;; (match #t [#f '(Not me)] [_ '(I love you)]) ;;; (match 'you ['me '(Not me)] [x `(I love ,x)]) ;;; (match '(foo bar) ['(foo bar) '(I love you)]) ;;; (match '(I cannot lift you) [(list 'I 'cannot _ c) `(I love ,c)]) ;;; (match '(2 3 1) [(list-no-order 3 1 2) '(I love you)]) ;;; (match '(love you I) [(list-no-order 'I 'love foo) `(I love ,foo)]) ;;; (match '(3 . 4) [(cons 3 4) '(I love you)]) ;;; (match '(3 love 1) [(cons 3 (cons x (cons 1 '()))) `(I ,x you)]) ;;; (match '(3 love 1) [(cons 3 (cons x (cons 1 '()))) `(I (unquote x) you)]) ;;; (match 3 [(? symbol?) '(Not me)] [(? string?) '(Me neither)] [(? number?) '(I love you)]) ;;; (match 3 [(not 4) '(I love you)] [3 'unreachable]) ;;; (match '(you love I) [`(,c love ,a) `(,a love ,c)]) ;;; (match '(We love you) [`(,_ . ,rest) `(I . ,rest)]) ;;; (match '(We love you) [`(,_ ,rest ...) `(I ,@rest)]) ;;; (match '(We love you) [(list _ rest ...) `(I ,@rest)]) ;;; (match #(1 love 3) [(vector (? number?) b (? number?)) `(I ,b you)]) ;;; (match #hash((1 . I) (3 . you) (5 . love)) [(hash-table (1 a) (5 b) (3 c)) (list a b c)]) ;;; (match 'you [(and x (? symbol?)) `(I love ,x)]) ;;; (match '100 [(app (λ (n) (- n 1)) 99) '(I love you)]) ;;; (list 'I (call/cc (λ (cc) (error (cc 'love)))) 'you) ;;; (with-handlers ([symbol? (lambda (p) `(I ,p you))]) (raise 'love)) ;;; (let ([problem (delay (car '()))]) '(I love you)) ;;; `(I ,(force (delay 'love)) you) ;;; (letrec ([x (delay (list a b c))] [a 'I] [c 'you] [b 'love]) (force x)) ;;; (let ([word 'know]) (set! word 'love) `(I ,word you)) ;;; (let ([word-box (box 'know)]) (set-box! word-box 'love) `(I ,(unbox word-box) you)) ;;; (let-syntax ([un-yoda-list (syntax-rules () [(_ c a b) (list 'a 'b 'c)])]) (un-yoda-list you I love)) ;;; (let ((in (open-input-string "I love you"))) (cons (read in) (cons (read in) (cons (read in) '())))) ;;; (list (touch (future (λ () 'I))) 'love 'you) ;;; (let ([a (make-parameter "a")] [b (make-parameter "b")] [c (make-parameter "c")]) (parameterize ([a 'i] [b 'love] [c 'you]) (list (a) ((parameterize ([b 'dislike]) (λ () (b)))) (c))))

Contributions

From David Van Horn:

(define `λ (λ 'love 'I 'you)) ((λ λ λ) `(λ (⊙ λ ∪) λ) `(λ (λ ⊙ ∪) λ) `(λ (∪ ⊙ λ) λ))

From Bruce Bolick:

(define (stream-take s n) (if (= n 0) '() (cons (stream-first s) (stream-take (stream-rest s) (- n 1))))) (define U 3) (define I stream-take) (define ♥ (stream 'I 'love 'you)) (I ♥ U)

More resources

The Racket docs are a good place to start.

My research colleague David Van Horn has co-authored Realm of Racket , which teaches both programming and Racket via game programming:

Co-authored by Matthias Felleisen and Conrad Barski (of Land of Lisp fame), this is an excellent resource for learning.

Related pages