NewtonScript Examples
First, we will create an empty frame to hold the function:
myFunctions := {}; #441734D {}Now we can make the function as a slot named
Min
in myFunctions
:
myFunctions.Min := func(anArray) begin local minSoFar := anArray[0]; for i := 1 to Length(anArray) - 1 do if anArray[i] < minSoFar then minSoFar := anArray[i]; return minSoFar; end; #4417D89 <function, 1 arg(s) #4417D89>Test the function:
myFunctions:Min([5, 7, 3, 1, 10]) #4 1As the function is written, it assumes that there is at least one element in the array. So what happens when we call it with an empty array? Why, we get an error, of course:
myFunctions:Min([]) Index 0 out of bounds for object [] evt.ex.fr;type.ref.frame -48205So let's rewrite the function so that it will work even when we pass it an empty array. While we're at it, we'll take advantage of the
foreach
construct:
myFunctions.Min := func(anArray) begin local minSoFar := nil; foreach element in anArray do if minSoFar = nil or element < minSoFar then minSoFar := element; return minSoFar; end; #441A031 <function, 1 arg(s) #441A031>The first time through the loop,
minSoFar
is nil
, and therefore element
is assigned to minSoFar
. Subsequent times though the loop, element
is compared to minSoFar
(element < minSoFar
). Therefore, minSoFar
holds the minimum element seen so far, or nil
if no elements have been seen.Let's test this function:
myFunctions:Min([5, 7, 3, 1, 10]) #4 1What happens when we call it with an empty array? As we expect, we no longer get an error:
myFunctions:Min([]) #2 NIL
An online version of Programming for the Newton using Macintosh, 2nd ed. ©1996, 1994, Julie McKeehan and Neil Rhodes.
Last modified: 1 DEC 1996