Skip to content

Instantly share code, notes, and snippets.

@aaronfeng
Created August 30, 2009 21:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aaronfeng/178132 to your computer and use it in GitHub Desktop.
Save aaronfeng/178132 to your computer and use it in GitHub Desktop.
Little Schemer to Clojure translation
(defn firsts [l]
(cond (empty? l) '()
:else (cons (ffirst l) (firsts (rest l)))))
(defn firsts2
([l]
(firsts l '()))
([l acc]
(cond (empty? l) (reverse acc)
:else (recur (rest l) (cons (ffirst l) acc)))))
(defn insertR [new old lat]
(cond (empty? lat) '()
(= old (first lat)) (cons old (cons new (rest lat)))
:else (cons (first lat) (insertR new old (rest lat)))))
(defn insertR2
([new old lat] (insertR2 new old lat '()))
([new old lat acc] (cond (empty? lat) acc
(= old (first lat)) (concat (reverse (cons new (cons old acc))) (rest lat))
:else (recur new old (rest lat) (cons (first lat) acc)))))
(defn lat [l]
(cond (empty? l) true
(symbol? (first l)) (lat (rest l))
:else false))
(defn lat2 [l]
(cond (empty? l) true
(symbol? (first l)) (recur (rest l))
:else false))
(defn member? [a lat]
(cond (empty? lat) false
:else (or (= a (first lat))
(member? a (rest lat)))))
(defn member2? [a lat]
(cond (empty? lat) false
:else (or (= a (first lat))
(recur a (rest lat)))))
(defn rember [a lat]
(cond (empty? lat) '()
(= a (first lat)) (rest lat)
:else (cons (first lat) (rember a (rest lat)))))
(defn rember2
([a lat] (rember a lat '()))
([a lat acc]
(cond (empty? lat) acc
(= a (first lat)) (concat acc (rest lat))
:else (recur a (rest lat) (cons (first lat) acc)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment