A.8. Chapter 8

A.8.1. Exercise 1 solution

-- Add three numbers and return the result

on sum(x, y, z)
    if class of x is in {real, integer} and class of y is in {real, integer} and ¬
          class of z is in {real, integer} then
        return x + y + z
    else
        return 0
    end if
end sum

A.8.2. Exercise 2 solution

-- sum all the numbers in a list

on listSum(L)
    set theSum to 0

    if class of L is list then
        repeat with num in numbers in L
set theSum to theSum + num
        end repeat
    end

    return theSum
end listSum

A.8.3. Exercise 3 solution

-- remove numItems items from L starting at n

on removeItems(L, n, numItems)
  if n > 0 and numItems > 0 and n + numItems - 1   (count L) then
      if n = 1 then                                -- remove leading items
         if N + numItems - 1 = (count L) then
              set L to {}                          -- remove all items
         else
              set L to items (n + numItems) thru −1 of L
         end if
      else if n + numItems - 1 = (count L) then    -- remove ending items
         set L to items 1 thru (n - 1) of L
      else                                         -- remove in between items
         set L to (items 1 thru (n - 1) of L) & (items (n + numItems) thru −1) of L
      end if
  end if

  return L
end removeItems

-- test case
removeItems({1,2,3,4,5}, 2, 3)

A.8.4. Exercise 4 solution

The call

reverse of listSort(L)

would give you a list sorted in descending order.

A.8.5. Exercise 5 solution

on listSort of L given ascendingSort:ascendingFlag
    if ascendingFlag then
        return quickSort(L, 1, count L)
    else
        return reverse of quickSort(L, 1, count L)
    end if
end listSort

Bonus:

-- Recursive quick sort on listSort of L given ascendingSort:ascendingFlag return ...

Get Beginning AppleScript® now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.