<div dir="ltr">on Date: Fri, 27 Oct 2017 17:52:54 +0100 Johannes Weiß &lt;<a href="mailto:johannesweiss@apple.com">johannesweiss@apple.com</a>&gt; wrote:<div><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
&gt; On 27 Oct 2017, at 6:27 am, Howard Lovatt via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; In terms of recursion you can fiddle it:<br>
&gt;<br>
&gt; struct RecursiveClosure&lt;C&gt; {<br>
&gt;     var c: C! = nil<br>
&gt; }<br>
&gt; func factorial(_ n: Int) -&gt; Int {<br>
&gt;     var recursive = RecursiveClosure&lt;(Int) -&gt; Int&gt;()<br>
&gt;     recursive.c = { x in<br>
&gt;         (x == 0) ? 1 : x * recursive.c(x - 1)<br>
&gt;     }<br>
&gt;     return recursive.c(n)<br>
&gt; }<br>
&gt; factorial(5) // 120</blockquote><div><br></div><div>what a hack and a half :)</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">sorry, offtopic to the thread but that you can have easier with the fixed-point combinator (<a href="https://en.wikipedia.org/wiki/Fixed-point_combinator" rel="noreferrer" target="_blank">https://en.wikipedia.org/<wbr>wiki/Fixed-point_combinator</a>)<br></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
// the fixed-point combinator<br>
func fix&lt;T&gt;(_ f: @escaping ((@escaping (T) -&gt; T) -&gt; (T) -&gt; T)) -&gt; (T) -&gt; T {<br>
    return { (x: T) in (f(fix(f)))(x) }<br>
}<br>
<br>
// demo<br>
let fact = fix { fact_ in { n in n == 1 ? 1 : n * fact_(n-1) } }<br>
for i in 1..&lt;10 {<br>
    print(fact(i))<br>
}<br></blockquote><div><br></div><div>that would be a serious crime against humanity if swift allows this type of code at all :-)</div><div><br></div><div>Mike</div><div><br></div></div></div></div></div>