CSE 428, Spring 2000: Solution of Assignment #8


  1.    fun curry f x y = f(x,y);
    
    Other possible (equivalent) definitions are:
       fun curry f = fn x => fn y => f(x,y);
       val curry = fn f => fn x => fn y => f(x,y);
    

  2.    fun filter p [] = []
         | filter p (x::l) = (if p x then [x] else []) @ filter p l;
    

    1.    val length = let fun plus1(x,y) = 1 + y 
                       in reduce plus1 0
                      end;
      
      or, equivalently:
         val length = reduce (fn(x,y) => 1 + y) 0;
      
    2.    val maximum_positive = let fun max(x,y) = if x>y then x else y
                                 in reduce max 0
                                end;
      
      or, equivalently:
         val maximum_positive = reduce (fn(x,y) => if x>y then x else y) 0;
      
    3.    val reverse = let fun insert_at_end (x,l) = l @ [x]
                        in reduce insert_at_end  []
                       end;
      
      or, equivalently:
         val reverse = reduce (fn(x,l) => l @ [x]) false;
      
    4.    fun occurs x = let fun found (y,b) = b orelse x=y
                         in reduce found false
                        end;
      
      or, equivalently:
         fun occurs x = reduce (fn(y,b) => b orelse x=y) false;
      

    1.    val f = fn x => fn y => (x,y);
      
      or equivalently:
         fun f x y = (x,y);
      
    2.    val g = fn u => fn x => u(x,x);
      
      or equivalently:
         fun g u x = u(x,x);
      
    3.    val h = fn u => fn l => [u(hd l)];
      
      or equivalently:
         fun h u l = [u(hd l)];