<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Object Mentor Blog: More Clojure from Uncle Bob JSPS</title>
    <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>More Clojure from Uncle Bob JSPS</title>
      <description>&lt;p&gt;Thanks to all who posted their solutions to the Bowling Game.  Just to be contrary, I decided to implement yet another kind of solution.  This one clearly shows my OO roots.&lt;/p&gt;


h2. Here are the tests.
&lt;pre&gt;
(ns bowling-game)
(use 'clojure.contrib.test-is)
(use 'bowling-game)

(defn roll-list [game list]
  (vec (concat game list)))

(defn roll-many [game n pins]
  (roll-list game (repeat n pins)))

(deftest can-create-game
  (is (not (nil? (new-game)))))

(deftest gutter-game-should-score-0
  (is (= 0 (score (-&amp;gt; (new-game) (roll-many 20 0))))))

(deftest all-ones-should-score-20
  (is (= 20 (score (-&amp;gt; (new-game) (roll-many 20 1))))))

(deftest one-spare
  (is (= 16 (score (-&amp;gt; (new-game) (roll-list [5 5 3]) (roll-many 17 0))))))

(deftest one_strike
  (is (= 24 (score (-&amp;gt; (new-game) (roll-list [10 3 4]) (roll-many 16 0))))))

(deftest perfect-game
  (is (= 300 (score (-&amp;gt; (new-game) (roll-many 12 10))))))

(run-tests 'bowling-game)
&lt;/pre&gt;
&lt;hr/&gt;

	&lt;h2&gt;And here is the code.&lt;/h2&gt;


&lt;pre&gt;
(ns bowling-game)
(defn new-game [] [])

(defn frame-type [[first second]]
  (cond
    (= 10 first) :strike
    (= 10 (+ first second)) :spare
    :else :no-mark))

(defmulti frame-size frame-type)
(defmethod frame-size :strike [_] 1)
(defmethod frame-size :spare [_] 2)
(defmethod frame-size :no-mark [_] 2)

(defmulti frame-score frame-type)
(defmethod frame-score :strike [[_ first second]] (+ 10 (+ first second)))
(defmethod frame-score :spare [[_ _ next]] (+ 10 next))
(defmethod frame-score :no-mark [[first second]] (+ first second))

(defn score [game]
  (loop [frame 1 rolls game score 0]
    (if (&amp;gt; frame 10)
      score
      (recur (inc frame) (subvec rolls (frame-size rolls)) (+ score (frame-score rolls))))))
&lt;/pre&gt;</description>
      <pubDate>Fri, 31 Jul 2009 08:12:44 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:562954b1-4789-4bbb-b864-ff3298fedea7</guid>
      <author>Uncle Bob</author>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps</link>
      <category>Uncle Bob's Blatherings</category>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by Discount Louboutin Shoes</title>
      <description>&lt;p&gt;Every women always has Christian Louboutins Wedding Shoes turn of fame but it also has its own goodbyes.&lt;/p&gt;</description>
      <pubDate>Wed, 11 Jan 2012 20:31:09 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:686c4fef-55fc-483a-bc90-032e492f834e</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-197168</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by gianmarco lorenzi</title>
      <description>&lt;p&gt;too wide to freeze&lt;/p&gt;</description>
      <pubDate>Sun, 01 Jan 2012 21:03:59 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:f64834df-b95b-4871-94bd-e067ce8b982d</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-194069</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by Tips For Bowling</title>
      <description>&lt;p&gt;Everybody has a high point and a lot goes into that: timing, situation, general consciousness.&lt;/p&gt;</description>
      <pubDate>Tue, 18 Oct 2011 12:19:59 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:863b673e-59f8-4d66-b123-305a5cf6a2b5</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-159090</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by best sleep aid</title>
      <description>&lt;p&gt;Cloudsourcing combines on-demand business process outsourcing (BPO) with crowdsourcing technologies to enable companies to purchase quality BPO services on-demand through a pay-per-use model.&lt;/p&gt;</description>
      <pubDate>Fri, 30 Sep 2011 12:26:08 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:eadc5694-b407-4c0f-9979-c87f9957f948</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-148548</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by bagsupplyer</title>
      <description>&lt;p&gt;Thanks for share with us.I look forward to reading more. &lt;a href="http://www.bagsupplyer.com/Brand-Handbags-s1213/" rel="nofollow"&gt;Designer fashion women replica shoulder bag from China for sale on line&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 06 Sep 2011 04:02:02 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:6f52f88e-9343-4ff0-b7b7-dcfc942e41c8</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-137425</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by beats by dr dre headphones</title>
      <description>&lt;p&gt;I found that his foot odors never bring us to death.I never regret buying these &lt;a href="http://www.drebeatsstudio.com/beats-by-dr-dre-studio-c-3.html" rel="nofollow"&gt;beats by dr dre studio&lt;/a&gt; for him.
These &lt;a href="http://www.drebeatsstudio.com/beats-by-dr-dre-solo-c-5.html" rel="nofollow"&gt;beats by dr dre solo&lt;/a&gt; are just the same as selling in the franchise store.Or even better.&lt;/p&gt;</description>
      <pubDate>Fri, 03 Jun 2011 23:09:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:b08aedc4-0834-4d4a-b0c7-26bccebae96e</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-107873</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by shoes christian louboutin</title>
      <description>&lt;p&gt;It doesn&amp;#8217;t matter, I can upload again for you. What server do you prefer most? :D&lt;/p&gt;</description>
      <pubDate>Wed, 18 May 2011 23:02:32 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:553e61af-d160-4ad5-a20b-5fc2884ae46b</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-101508</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by okey oyunu oyna </title>
      <description>&lt;p&gt;Nice code. Thanks&lt;/p&gt;


	&lt;p&gt;internette g&#246;r&#252;nt&#252;l&#252; olarak &lt;a href="http://www.okeyoyunu-oyna.com" rel="nofollow"&gt;okey oyunu oyna&lt;/a&gt;, ger&#231;ek kisilerle tanis,
 turnuva heyecanini yasa.&lt;/p&gt;</description>
      <pubDate>Thu, 28 Apr 2011 14:48:37 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:5e45e46e-4c60-4b29-93de-d423d0dde4e3</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-92778</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by vibradngers</title>
      <description>&lt;p&gt;I started with making enhancements to a unit test framework called lisp-unit. What I wanted is to change its output and also to add fixtures to my tests.&lt;/p&gt;</description>
      <pubDate>Sat, 19 Mar 2011 04:29:01 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:34765d0a-8a38-416f-b237-d92aa9eee56a</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-73901</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by cold room</title>
      <description>&lt;p&gt;Haile Electric Industrial Co. Ltd. is the leading manufacturer and exporter of cold room,axial fan,condensing unit,centrifugal fan,shaded pole motor and refrigeration products in China.&lt;/p&gt;</description>
      <pubDate>Mon, 28 Feb 2011 23:45:49 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:d7e437d0-ffdd-490c-8380-bdfd9ca8bed7</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-67628</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by Criminal Records</title>
      <description>&lt;p&gt;I started with making enhancements to a unit test framework called lisp-unit. What I wanted is to change its output and also to add fixtures to my tests.&lt;/p&gt;</description>
      <pubDate>Thu, 17 Feb 2011 16:45:34 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:885c7122-2069-41d0-8427-c7c98db37595</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-63956</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by Tenant Screening</title>
      <description>&lt;p&gt;I understand why it is, but still the nice thing about using a lisp language is that you can change it to go in the direction of a DSL. Unit testing is an DSL.&lt;/p&gt;</description>
      <pubDate>Thu, 17 Feb 2011 14:44:30 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:84d329e1-2b9b-4e13-9358-1c2e1077117e</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-63876</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by lupus symptoms</title>
      <description>&lt;p&gt;I guess that I&#8217;ll persevere with it, especially since you lately tweeted that your opinion of the book is changing, that the organization is frustrating, but the content is rich.&lt;/p&gt;</description>
      <pubDate>Sun, 06 Feb 2011 07:50:15 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:381fb2fa-c121-4951-b770-9b906b6c7e47</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-61068</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by Criminal Check</title>
      <description>&lt;p&gt;The most important part of OOP is data encapsulation and having the methods that transform the data into the behavior that the object needs and the above definitely qualifies.&lt;/p&gt;</description>
      <pubDate>Tue, 11 Jan 2011 13:04:10 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:8757588d-bd1b-4e80-a5a4-6b2d4ee201d1</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-56180</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by garbage bag making machine</title>
      <description>&lt;p&gt;This is one of the most professional manufacturers and suppliers in plastic packing machinery. We mainly provide &lt;a href="http://www.bag-making-machine.net" rel="nofollow"&gt;non woven bag making machine&lt;/a&gt;,disposable glove machines,blowing film machines,flexo printing machines,&lt;a href="http://www.bag-making-machine.net" rel="nofollow"&gt;garbage bag making machine&lt;/a&gt; etc.&lt;/p&gt;</description>
      <pubDate>Mon, 10 Jan 2011 00:17:42 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:2222e76b-d679-468b-9074-e568c2d0cfc7</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-55504</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by moncler</title>
      <description>&lt;p&gt;thanks for &lt;a href="http://www.monclerjacketsk2.com/" rel="nofollow"&gt;Moncler Jackets&lt;/a&gt; || &lt;a href="http://www.christianlouboutinysluk.com/" rel="nofollow"&gt;Christian louboutin UK&lt;/a&gt; || &lt;a href="http://www.monclerjacketsparka.com/" rel="nofollow"&gt;Moncler coats&lt;/a&gt; || &lt;a href="http://www.christianlouboutin120.com/" rel="nofollow"&gt;Christian louboutin shoes&lt;/a&gt; || &lt;a href="http://www.christianlouboutin-new.com/" rel="nofollow"&gt;Christian louboutin pumps&lt;/a&gt; your post!&lt;/p&gt;</description>
      <pubDate>Thu, 06 Jan 2011 09:05:36 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:05af8866-cb95-4a6e-9e76-5bdffe5e6662</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-54827</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by Silicone Molding</title>
      <description>&lt;p&gt;&lt;a href="http://www.taiwanmoldmaker.com/service-mold-maker.html" rel="nofollow"&gt;Mold making&lt;/a&gt; is the core business of Intertech (Taiwan).  With world level technology,  
Intertech enjoys a very good reputation for making &lt;a href="http://www.taiwanmoldmaker.com/service-injection-mold.html" rel="nofollow"&gt;Injection Mold&lt;/a&gt; and 
&lt;a href="http://www.taiwanmoldmaker.com/service-plastic-mold.html" rel="nofollow"&gt;Plastic Molds&lt;/a&gt;for their worldwide customers.&lt;/p&gt;</description>
      <pubDate>Mon, 03 Jan 2011 20:55:43 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:ddce365d-e2fc-43a5-bc70-e0ff847f3634</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-53915</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by willson</title>
      <description>&lt;p&gt;Thanks for sharing. I get satisfaction from this site. preserve it up.&lt;a href="http://www.uggsoutletugg.net/ " rel="nofollow"&gt; uggs outlet &lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 10 Dec 2010 01:29:43 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:f8c17212-68ed-42ea-aa32-53ca60909169</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-47847</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by Mens Watch</title>
      <description>&lt;p&gt;Lady Gaga &lt;a href="http://www.watchesall8.com/" rel="nofollow"&gt;Mens Watch&lt;/a&gt; has undergone &lt;a href="http://www.replicahandbagsinfo.com/" rel="nofollow"&gt;louis vuitton wallet&lt;/a&gt; a &amp;#8220;spiritual&amp;#8221;  commitment ceremony with her boyfriend.The &lt;a href="http://www.watches1881.com/" rel="nofollow"&gt;rolex watch&lt;/a&gt; &amp;#8216;Paparazzi&amp;#8217;hitmaker and Luc Carl reportedly .zf&lt;/p&gt;</description>
      <pubDate>Tue, 26 Oct 2010 03:35:16 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:58f6cd61-698a-45a1-8e13-f2802dd74942</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-35768</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by bag manufacturer</title>
      <description>&lt;p&gt;tions to the Bowling Game. Just to be contrary, I decided to implement ye&lt;/p&gt;</description>
      <pubDate>Sun, 12 Sep 2010 22:27:54 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:8a35c2a4-c86e-4bdf-abf5-aa9eea967d24</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-26101</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by Bob</title>
      <description>&lt;p&gt;Really helpful for me.I have learned a lot &lt;a href="http://www.zhuoerya.cn/" rel="nofollow"&gt;makeup brushes&lt;/a&gt; about asp.net from this.&lt;/p&gt;</description>
      <pubDate>Sat, 14 Aug 2010 01:34:39 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:7b18ad27-c528-4150-b545-2095cda958d8</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-19912</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by Kooba Handbags   </title>
      <description>&lt;p&gt;Living without an aim is like sailing without a compass.
with a new &lt;a href="http://www.handbags4buy.com/" rel="nofollow"&gt;http://www.handbags4buy.com/&lt;/a&gt; idea is a crank until the idea succeeds.&lt;/p&gt;</description>
      <pubDate>Wed, 31 Mar 2010 23:05:04 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:25990f67-025b-4efd-84d1-3e8fe0b2f772</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-8916</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by Philip Schwarz</title>
      <description>&lt;p&gt;@Uncle Bob&lt;/p&gt;


	&lt;p&gt;When I saw your previous blog entry, &lt;a href="http://blog.objectmentor.com/articles/2009/07/19/uncle-bob-jsps-learning-clojure" rel="nofollow"&gt;Uncle Bob, JSPS: Learning Clojure&lt;/a&gt;, I had a go at coding the bowling game, but didn&amp;#8217;t get round to posting my solution because I got interrupted by something else. 
&lt;br&gt;
&lt;br&gt;
I had gone for exactly the same frame-type function as you did! Here is my attempt (my first Clojure program):&lt;/p&gt;


&lt;pre&gt;
(defn frame-type [[first second]] 
    (cond (= 10 first) :strike
          (= 10 (+ first second)) :spare
          :else :normal))

(defmulti score frame-type)
(defmethod score :strike [[_ first second &amp;#38; rest]] 
  (+ 10 first second (if (nil? rest) 0 (score (into [first second] rest)))))
(defmethod score :spare  [[_ _ next &amp;#38; rest]] 
  (+ 10 next (if (nil? rest) 0 (score (cons next rest)))))
(defmethod score :normal [[first second &amp;#38; rest]] 
  (+ first second (if (nil? rest) 0 (score rest))))
&lt;/pre&gt;       

	&lt;p&gt;At the time, I did not write it test-first, but I have now tested it using a minor adaptation of your tests:&lt;/p&gt;


&lt;pre&gt;
(deftest gutter-game-should-score-0
  (is (= 0 (score  (repeat 20 0)))))  
(deftest all-ones-should-score-20
  (is (= 20 (score  (repeat 20 1)))))
(deftest one-spare
  (is (= 16 (score (into [5 5 3] (repeat 17 0) ) )))) 
(deftest one-strike
  (is (= 24 (score (into [10 3 4] (repeat 16 0))))))  
(deftest perfect-game
  (is (= 300 (score (repeat 12 10)))))
(run-tests)
&lt;/pre&gt;

	&lt;p&gt;I prefer my Haskell version of the Bowling Game:&lt;/p&gt;


&lt;pre&gt;
score [x, y]                             = x + y      -- Normal Frame
score [10, x, y]                         = 10 + x + y -- Strike
score [x, y, z]                          = 10 + z     -- Spare
score (10:(x:(y:rest)))                  = 10 + x + y + score (x:(y:rest)) -- Strike
score (x:(y:(z:rest)))  | (x + y) == 10  = 10 + z + score (z:rest)         -- Spare
score (x:(y:rest))      | otherwise      = x + y + score rest              -- Normal Frame
&lt;/pre&gt;

	&lt;p&gt;It is easier to read/understand.&lt;/p&gt;


	&lt;p&gt;Your initial tweet about the &lt;a href="http://www.pragprog.com/titles/shcloj/programming-clojure" rel="nofollow"&gt;Clojure book&lt;/a&gt; prompted me to get a copy of the book. I agree with your later tweet, that the book is disappointing because it feels rushed, but I guess that I&amp;#8217;ll persevere with it, especially since you lately tweeted that your opinion of the book is changing, that the organization is frustrating, but the &lt;i&gt;content&lt;/i&gt; is rich.&lt;/p&gt;


	&lt;p&gt;I look forward to your future thoughts on functional programming.&lt;/p&gt;</description>
      <pubDate>Sat, 01 Aug 2009 20:50:18 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:253023f4-f4f3-4f5f-8336-97dbe34c9a9d</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-3819</link>
    </item>
    <item>
      <title>"More Clojure from Uncle Bob JSPS" by http://uglylispcode.wordpress.com</title>
      <description>&lt;p&gt;@uncle bob,&lt;/p&gt;


	&lt;p&gt;If any yahoos try telling you that functional programming is not OOP, they are blowing smoke.&lt;/p&gt;


	&lt;p&gt;A lambda over let over lambda is an object.&lt;/p&gt;


	&lt;p&gt;To me the most important part of OOP is data encapsulation and having the methods that transform the data into the behavior that the object needs and the above definitely qualifies.&lt;/p&gt;


	&lt;p&gt;You don&amp;#8217;t think that the principles that you use for OOP no longer apply when working with a functional program? OCP, SRP, LSP, and all the rest definitely apply.&lt;/p&gt;


	&lt;p&gt;If you keep in mind that sequences (alist and plist) is the basic data types. And that the operators (I say operators not methods) are used to transform (iteration and recursion) the lists into the outputs you desire.&lt;/p&gt;


	&lt;p&gt;When I started working with CL, I started with making enhancements to a unit test framework called lisp-unit. What I wanted is to change its output and also to add fixtures to my tests.&lt;/p&gt;


	&lt;p&gt;For me the unit test framework is ugly: (is(= 0 0)) what the hell! The first thing I would do is change it something like this: (should= 0, 0) or (is= 0, 0). The parenthesis has too much noise. I understand why it is, but still the nice thing about using a lisp language is that you can change it to go in the direction of a DSL. Unit testing is an DSL.&lt;/p&gt;


	&lt;p&gt;I highly recommend that when starting a new language use it with something that you do know&lt;/p&gt;


	&lt;p&gt;Right now I&amp;#8217;ve stopped with the CL and am back into the dotnet world. I want to bring some of the things I learned with CL back into C#.&lt;/p&gt;


	&lt;p&gt;My two blogs are here, check them out:
&lt;a href="http://uglylispcode.wordpress.com" rel="nofollow"&gt;http://uglylispcode.wordpress.com&lt;/a&gt;
&lt;a href="http://uglycode.wordpress.com" rel="nofollow"&gt;http://uglycode.wordpress.com&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sat, 01 Aug 2009 19:46:11 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:967d072a-732a-41c8-8e68-658c28db89a2</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/31/more-clojure-from-uncle-bob-jsps#comment-3818</link>
    </item>
  </channel>
</rss>

