Stair-climbing puzzle: Difference between revisions

Added EchoLisp
(Added EchoLisp)
Line 376:
return loop(1)
}</lang>
 
=={{header|EchoLisp}}==
<lang scheme>
(define (step-up) (while (not (step)) (step-up)))
;; checking this is tail-recusive :
step-up
→ (#λ null (#while (#not (step)) (#lambda-tail-call)))
 
;; Experimentation (not part of the task)
:: How much step calls to climb 1000 stairs ?
;; success is the robot success probability
(define (step)
(set! STEPS (1+ STEPS)) ;; count
(< (random) SUCCESS)) ;; ->#t or #f
 
(define (climb stairs)
(when (> stairs 0) (step-up) (climb (1- stairs))))
(define (task (stairs 1000))
(for ((success (in-range 1 0 -5/100)))
(set! SUCCESS success)
(set! STEPS 0)
(climb stairs)
(writeln 'stairs stairs 'probability success 'steps STEPS)))
 
</lang>
 
{{out}}
<pre>
stairs 1000 probability 1 steps 1000
stairs 1000 probability 19/20 steps 1062
stairs 1000 probability 9/10 steps 1115
stairs 1000 probability 17/20 steps 1207
stairs 1000 probability 4/5 steps 1254
stairs 1000 probability 3/4 steps 1305
stairs 1000 probability 7/10 steps 1440
stairs 1000 probability 13/20 steps 1542
stairs 1000 probability 3/5 steps 1641
stairs 1000 probability 11/20 steps 1865
stairs 1000 probability 1/2 steps 2045
stairs 1000 probability 9/20 steps 2177
stairs 1000 probability 2/5 steps 2615
stairs 1000 probability 7/20 steps 2769
stairs 1000 probability 3/10 steps 3312
stairs 1000 probability 1/4 steps 3963
stairs 1000 probability 1/5 steps 5054
stairs 1000 probability 3/20 steps 6573
stairs 1000 probability 1/10 steps 9840
stairs 1000 probability 1/20 steps 18689
 
;; looks as if steps = stairs / success-probability
</pre>
 
 
=={{header|Erlang}}==