From 4baf14972fa7a45c4da0316cfcb03664cea17c12 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Thu, 13 Oct 2011 13:04:24 -0700 Subject: [PATCH] sequences: adding ?last for symmetry. --- basis/compiler/cfg/ssa/construction/construction.factor | 2 +- basis/farkup/farkup.factor | 3 --- core/sequences/sequences-docs.factor | 4 ++++ core/sequences/sequences-tests.factor | 4 ++++ core/sequences/sequences.factor | 1 + 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/basis/compiler/cfg/ssa/construction/construction.factor b/basis/compiler/cfg/ssa/construction/construction.factor index 4f156f38d6..bb1c20df9f 100644 --- a/basis/compiler/cfg/ssa/construction/construction.factor +++ b/basis/compiler/cfg/ssa/construction/construction.factor @@ -92,7 +92,7 @@ SYMBOLS: stacks pushed ; if ; : (top-name) ( vreg -- vreg' ) - stacks get at [ f ] [ last ] if-empty ; + stacks get at ?last ; : top-name ( vreg -- vreg' ) (top-name) diff --git a/basis/farkup/farkup.factor b/basis/farkup/farkup.factor index b4e5a2b981..9473ccedfb 100644 --- a/basis/farkup/farkup.factor +++ b/basis/farkup/farkup.factor @@ -150,9 +150,6 @@ DEFER: (parse-paragraph) rest dup last empty? [ but-last ] when ; -: ?last ( seq -- elt/f ) - [ f ] [ last ] if-empty ; - : coalesce ( rows -- rows' ) V{ } clone [ '[ diff --git a/core/sequences/sequences-docs.factor b/core/sequences/sequences-docs.factor index 05365baf45..5c68a55873 100644 --- a/core/sequences/sequences-docs.factor +++ b/core/sequences/sequences-docs.factor @@ -187,6 +187,10 @@ HELP: ?second { $values { "seq" sequence } { "elt/f" "an object or " { $link f } } } { $description "A forgiving version of " { $link second } ". If the sequence has less than two elements, or if the sequence is " { $link f } ", simply outputs " { $link f } "." } ; +HELP: ?last +{ $values { "seq" sequence } { "elt/f" "an object or " { $link f } } } +{ $description "A forgiving version of " { $link last } ". If the sequence is empty, or if the sequence is " { $link f } ", simply outputs " { $link f } "." } ; + HELP: nth-unsafe { $values { "n" "an integer" } { "seq" sequence } { "elt" object } } { $contract "Unsafe variant of " { $link nth } " that does not perform bounds checks." } ; diff --git a/core/sequences/sequences-tests.factor b/core/sequences/sequences-tests.factor index c912fa346d..37e03ff9d2 100644 --- a/core/sequences/sequences-tests.factor +++ b/core/sequences/sequences-tests.factor @@ -245,6 +245,10 @@ unit-test [ f ] [ { } ?first ] unit-test [ 0 ] [ 10 iota ?first ] unit-test +[ f ] [ f ?last ] unit-test +[ f ] [ { } ?last ] unit-test +[ 9 ] [ 10 iota ?last ] unit-test + [ -1/0. 0 remove-nth! ] must-fail [ "" ] [ "" [ CHAR: \s = ] trim ] unit-test [ "" ] [ "" [ CHAR: \s = ] trim-head ] unit-test diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index 0971982e53..32cbce114f 100644 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -177,6 +177,7 @@ PRIVATE> : ?first ( seq -- elt/f ) 0 swap ?nth ; inline : ?second ( seq -- elt/f ) 1 swap ?nth ; inline +: ?last ( seq -- elt/f ) [ length 1 - ] [ ?nth ] bi ; inline MIXIN: virtual-sequence GENERIC: virtual-exemplar ( seq -- seq' )