Answer to Question linkedlist1-4

This is a scan problem. Here is a recursive definition.
  static int smallest(List L)
  {
    // The smallest member of a singleton list [x] is x.

    if(isEmpty(tail(L)))
    {
      return head(L);
    }

    // The smallest member of a list [x,y,z,w] is 
    // the minimun of x and the smallest of [y,z,w].

    else
    {
      return min(head(L), smallest(tail(L)));
    }
  }

Here is a looping definition. It keeps track of the smallest value seen so far as it scans the list.

  static int smallest(List L)
  {
    int smallestSoFar = head(L);

    for(rest = tail(L); !isEmptyList(rest); rest = tail(rest))
    {
       int h = head(rest);
       if(h < smallestSoFar)
       {
         smallestSoFar = h;
       }
    }
    return smallestSoFar;
  }