From 3afd2599ced7f6a2462c0182a9728edcd2c47147 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 22 Jun 2009 11:55:42 -0500 Subject: [PATCH] fix cursor 3map --- extra/cursors/cursors-tests.factor | 5 +++++ extra/cursors/cursors.factor | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/extra/cursors/cursors-tests.factor b/extra/cursors/cursors-tests.factor index 8294eb05e8..8821d4570c 100644 --- a/extra/cursors/cursors-tests.factor +++ b/extra/cursors/cursors-tests.factor @@ -37,3 +37,8 @@ IN: cursors.tests [ { 111 222 } ] [ { 1 2 } { 10 20 } { 100 200 } [ + + ] 3map ] unit-test + +: test-3map ( -- seq ) + { 1 2 } { 10 20 } { 100 200 } [ + + ] 3map ; + +[ { 111 222 } ] [ test-3map ] unit-test diff --git a/extra/cursors/cursors.factor b/extra/cursors/cursors.factor index 14cc1fdf7f..dc08656f7e 100644 --- a/extra/cursors/cursors.factor +++ b/extra/cursors/cursors.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2009 Slava Pestov, Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: accessors arrays generalizations kernel math sequences -sequences.private ; +sequences.private fry ; IN: cursors GENERIC: cursor-done? ( cursor -- ? ) @@ -127,12 +127,13 @@ M: to-sequence cursor-write : 2map ( seq1 seq2 quot -- ) [ cursor-map2 ] transform2 ; inline : find-done3? ( cursor1 cursor2 cursor3 quot -- ? ) - 3 nover 3array [ cursor-done? ] any? - [ 4 ndrop t ] [ [ [ cursor-get-unsafe ] tri@ ] dip call ] if ; inline + [ 3 ndrop t ] swap '[ [ cursor-get-unsafe ] tri@ @ ] + [ 3 ndup 3 narray [ cursor-done? ] any? ] 2dip if ; inline : cursor-until3 ( cursor cursor quot -- ) [ find-done3? not ] - [ drop [ cursor-advance ] tri@ ] bi-curry bi-curry bi-curry bi-curry while ; inline + [ drop [ cursor-advance ] tri@ ] + bi-curry bi-curry bi-curry bi-curry while ; inline : cursor-each3 ( cursor cursor quot -- ) [ f ] compose cursor-until3 ; inline