From a21fddc4dcbf551b2ace2b4539a93eefe7fbbd52 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Wed, 20 Mar 2013 13:44:54 -0700 Subject: [PATCH] math.extras: adding linspace. --- extra/math/extras/extras-docs.factor | 4 ++++ extra/math/extras/extras-tests.factor | 4 +++- extra/math/extras/extras.factor | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/extra/math/extras/extras-docs.factor b/extra/math/extras/extras-docs.factor index eb1ba697a1..f9cd705bcb 100644 --- a/extra/math/extras/extras-docs.factor +++ b/extra/math/extras/extras-docs.factor @@ -57,3 +57,7 @@ HELP: sinc { $values { "x" number } { "y" number } } { $description "Returns the " { $link sinc } " function, calculated according to " { $snippet "sin(pi * x) / (pi * x)" } ". The name " { $link sinc } " is short for \"sine cardinal\" or \"sinus cardinalis\"." } { $notes { $snippet "0 sinc" } " is the limit value of 1." } ; + +HELP: linspace +{ $values { "from" number } { "to" number } { "points" number } { "seq" sequence } } +{ $description "Return evenly spaced numbers over a specified interval " { $snippet "[from,to]" } "." } ; diff --git a/extra/math/extras/extras-tests.factor b/extra/math/extras/extras-tests.factor index 192a67ff81..28d0188133 100644 --- a/extra/math/extras/extras-tests.factor +++ b/extra/math/extras/extras-tests.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2012 John Benediktsson ! See http://factorcode.org/license.txt for BSD license -USING: math math.extras math.ranges sequences tools.test ; +USING: arrays math math.extras math.ranges sequences tools.test ; IN: math.extras.test @@ -77,3 +77,5 @@ IN: math.extras.test { 1 2 3 4 } { 0 1 0 0 2 3 } } [ { 1 2 1 1 3 4 } unique-indices ] unit-test + +{ { 1 10+3/4 20+1/2 30+1/4 40 } } [ 1 40 5 linspace >array ] unit-test diff --git a/extra/math/extras/extras.factor b/extra/math/extras/extras.factor index 7957dcd3ea..d65cd5ea18 100644 --- a/extra/math/extras/extras.factor +++ b/extra/math/extras/extras.factor @@ -198,3 +198,6 @@ PRIVATE> : unique-indices ( seq -- unique indices ) [ members ] keep over dup length iota H{ } zip-as '[ _ at ] map ; + +: linspace ( from to points -- seq ) + 1 - [ 2dup swap - ] dip / ;