]> gitweb.factorcode.org Git - factor.git/commitdiff
rosetta-code.metronome: simplify stack shuffling
authorJon Harper <jon.harper87@gmail.com>
Sun, 29 Sep 2013 17:24:37 +0000 (19:24 +0200)
committerJon Harper <jon.harper87@gmail.com>
Sun, 29 Sep 2013 17:37:34 +0000 (19:37 +0200)
extra/rosetta-code/metronome/metronome.factor

index 18b9331e0f0dd2b21d0e9a497f072ad70a2af9a6..d9095bc065e62074ba9bcb39bd74ecd634049db9 100644 (file)
@@ -2,9 +2,8 @@
 ! See http://factorcode.org/license.txt for BSD license.
 
 USING: accessors calendar circular colors.constants colors.hsv
-concurrency.semaphores generalizations kernel math
-openal.example threads timers ui ui.gadgets ui.gadgets.worlds
-ui.pens.solid ;
+concurrency.semaphores kernel math openal.example threads timers
+ui ui.gadgets ui.gadgets.worlds ui.pens.solid ;
 IN: rosetta-code.metronome
 
 : bpm>duration ( bpm -- duration ) 60 swap / seconds ;
@@ -27,16 +26,15 @@ IN: rosetta-code.metronome
         acquire [ play-note ] [ drop find-world handle>> ] 2bi
     ] curry with circular-loop ;
 
-: start-metronome-timer ( bpm semaphore -- timer )
+: (start-metronome-timer) ( bpm semaphore -- timer )
     [ release ] curry swap bpm>duration every ;
 
+: start-metronome-timer ( bpm -- timer semaphore )
+    0 <semaphore> [ (start-metronome-timer) ] keep ;
+
 : metronome ( bpm notes -- )
-    <circular> open-metronome-window
-    swap 0 <semaphore>
-    {
-        [ 2nip start-metronome-timer ]
-        [ metronome-loop drop ]
-    } 4 ncleave
+    [ start-metronome-timer ] dip
+    [ open-metronome-window ] 2dip <circular> swap metronome-loop
     stop-timer ;
 
 ! example usage: 60 { 440 220 330 } metronome