import java.io.*; class UseCharListsC1 { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); CharListC L1=null,L2=null,L3; char ch1,ch2; try { System.out.print("Enter first list of characters: "); L1 = CharListCIO.read(in); System.out.print("Enter second list of characters: "); L2 = CharListCIO.read(in); } catch(ListFormatException e) { System.out.println("Error: "+e.getMessage()); } System.out.print("The lists are: "); CharListCIO.print(L1); System.out.print(" and "); CharListCIO.print(L2); System.out.println(); System.out.println("Call append "); L3=append(L1,L2); System.out.print("The lists are now: "); CharListCIO.print(L1); System.out.print(" and "); CharListCIO.print(L2); System.out.print(" and "); CharListCIO.print(L3); System.out.println(); System.out.print("Enter first character: "); ch1=in.readLine().charAt(0); System.out.print("Enter second character: "); ch2=in.readLine().charAt(0); System.out.print("Call change of first to "); System.out.println("second character in second list "); L3=change(ch1,ch2,L2); System.out.print("The lists are now: "); CharListCIO.print(L1); System.out.print(" and "); CharListCIO.print(L2); System.out.print(" and "); CharListCIO.print(L3); System.out.println(); } public static CharListC append(CharListC L1,CharListC L2) { if(L1.isempty()) return L2; else { CharListC L3 = append(L1.tail(),L2); return L3.cons(L1.head()); } } public static CharListC change(char ch1,char ch2,CharListC L) { if(L.isempty()) return CharListC.empty(); else { CharListC T=change(ch1,ch2,L.tail()); char h=L.head(); if(h==ch1) return T.cons(ch2); else return T.cons(h); } } }