* threads.scm (parallel, letpar): Rewritten.
authorMikael Djurfeldt <djurfeldt@nada.kth.se>
Fri, 24 Jan 2003 10:32:13 +0000 (10:32 +0000)
committerMikael Djurfeldt <djurfeldt@nada.kth.se>
Fri, 24 Jan 2003 10:32:13 +0000 (10:32 +0000)
ice-9/ChangeLog
ice-9/threads.scm

index f25b13a..481d2a5 100644 (file)
@@ -1,3 +1,7 @@
+2003-01-24  Mikael Djurfeldt  <djurfeldt@nada.kth.se>
+
+       * threads.scm (parallel, letpar): Rewritten.
+
 2003-01-23  Mikael Djurfeldt  <djurfeldt@nada.kth.se>
 
        * threads.scm (par-mapper, n-par-map, n-par-for-each): Use
index f36aaea..32c5a15 100644 (file)
   (cond ((null? forms) '(begin))
        ((null? (cdr forms)) (car forms))
        (else
-        `(apply values
-                (map future-ref
-                     (list ,@(map (lambda (form) `(future ,form)) forms)))))))
+        (let ((vars (map (lambda (f)
+                           (make-symbol "f"))
+                         forms)))
+          `((lambda ,vars
+              (values ,@(map (lambda (v) `(future-ref ,v)) vars)))
+            ,@(map (lambda (form) `(future ,form)) forms))))))
 
 (define-macro (letpar bindings . body)
-  `(call-with-values
-       (lambda ()
-        (parallel ,@(map cadr bindings)))
-     (lambda ,(map car bindings)
-       ,@body)))
+  (cond ((or (null? bindings) (null? (cdr bindings)))
+        `(let ,bindings ,@body))
+       (else
+        (let ((vars (map car bindings)))
+          `((lambda ,vars
+              ((lambda ,vars ,@body)
+               ,@(map (lambda (v) `(future-ref ,v)) vars)))
+            ,@(map (lambda (b) `(future ,(cadr b))) bindings))))))
 
 (define-macro (make-thread proc . args)
   `(call-with-new-thread