Nice work everyone on the patches -- I'm very impressed!

There's been a couple of questions about how to interpret this. My thought 
is we should try and mimic an explicit recursion:

In other words:

(defn g
  [xs acc]
  {:pre [(or (nil? xs) (sequential? xs)) (number? acc)]
   :post [(number? %)]}
  (if (seq xs)
    (recur (next xs) (+ (first xs) acc))
    acc))

... should act like:

(defn g3
  [xs acc]
  {:pre [(or (sequential? xs) (nil? xs)) (number? acc)]
   :post [(number? %)]}
  (if (seq xs)
    (g3 (next xs) (+ (first xs) acc))
    acc))

(g [1 2 3] 0)
(g3 [1 2 3] 0)

... where g3 actually works (but runs the risk of blowing the stack).

Michael

On Saturday, July 26, 2014 9:34:48 AM UTC-6, Ambrose Bonnaire-Sergeant 
wrote:
>
> Doh! I forgot preconditions :D
>
> Fixing..
> Ambrose
>
>
> On Sat, Jul 26, 2014 at 11:30 PM, Ambrose Bonnaire-Sergeant <
> abonnair...@gmail.com <javascript:>> wrote:
>
>> Hi Steve,
>>
>> I think I got it right, please have a look: 
>> http://dev.clojure.org/jira/browse/CLJ-1475
>>
>> Thanks,
>> Ambrose
>>
>>
>> On Sat, Jul 26, 2014 at 10:38 PM, Ambrose Bonnaire-Sergeant <
>> abonnair...@gmail.com <javascript:>> wrote:
>>
>>> I'll give it a shot..
>>>
>>>
>>> On Sat, Jul 26, 2014 at 9:59 PM, Steve Miner <steve...@gmail.com 
>>> <javascript:>> wrote:
>>>
>>>> I'm giving up on this bug.  My approach was adding too much complexity 
>>>> to handle an edge case.  Hacking the fn macro is not as easy as it looks. 
>>>> :-)
>>>>
>>>> I recommend the loop work-around if you run into this problem.  Or 
>>>> refactor the recursive code into a separate function and call it from 
>>>> another function with the :pre and :post conditions in the non-recursive 
>>>> function.
>>>>
>>>> http://dev.clojure.org/jira/browse/CLJ-1475
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Clojure" group.
>>>> To post to this group, send email to clo...@googlegroups.com 
>>>> <javascript:>
>>>> Note that posts from new members are moderated - please be patient with 
>>>> your first post.
>>>> To unsubscribe from this group, send email to
>>>> clojure+u...@googlegroups.com <javascript:>
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/clojure?hl=en
>>>> ---
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Clojure" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to clojure+u...@googlegroups.com <javascript:>.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to