プログラミング言語 Standard ML 入門 (問題の解答例)
6 リスト

6.3 パターンマッチングによるリストの分解

問 6.3

zipunzip および lastcase 構文を使わ ずに定義せよ.

解答例 

   fun zip (nil,_) = nil
     | zip (_,nil) = nil
     | zip (h1::t1, h2::t2) = (h1,h2) :: zip (t1, t2)

   fun unzip nil = (nil,nil)
     | unzip ((a,b)::t) = let val (A,B) = unzip t in (a::A, b::B) end

   fun last [a] = a
     | last (_::t) = last t