From 990fdca1fc5f5f9708aef9f25832c4a464d3ccf3 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Thu, 23 Aug 2012 17:39:07 -0700 Subject: [PATCH] memoize: faster memoize for single argument words. --- basis/memoize/memoize.factor | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/basis/memoize/memoize.factor b/basis/memoize/memoize.factor index a1d4da62dc..7f62a8c161 100644 --- a/basis/memoize/memoize.factor +++ b/basis/memoize/memoize.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2007, 2010 Slava Pestov, Daniel Ehrenberg. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel hashtables sequences sequences.private arrays -words namespaces make parser effects.parser math assocs effects -definitions quotations summary accessors fry hashtables.identity ; +USING: accessors arrays assocs combinators definitions effects +effects.parser fry hashtables.identity kernel math sequences +sequences.private words ; IN: memoize > [ packer compose '[ _ _ cache ] ] keep + unpacker compose ; + : make/0 ( table quot effect -- quot ) out>> [ packer '[ @@ -50,7 +54,11 @@ IN: memoize ] keep unpacker compose ; : make-memoizer ( table quot effect -- quot ) - dup in>> length zero? [ make/0 ] [ make/n ] if ; + dup in>> length { + { 0 [ make/0 ] } + { 1 [ make/1 ] } + [ drop make/n ] + } case ; PRIVATE>