Monday, December 7, 2009

Scala 2.8 Traversable and IndexedSequence

This topic is really just a collection of examples using the Scala 2.8 API. The examples are mostly based on Strings. But because Strings are in fact an IndexedSeq all of these examples also work with Lists arrays and the first several work with all collections.

These examples are all based on first Traversable. The basis of all collections and therefore will work with all collections. And the next set of examples work with IndexedSeq and most will work with Seq as well. Sets, Maps and others still need to be examined.

This is not an exhaustive set of examples and not all are even that interesting (sorry :-) ). But I let out the most trivial unless theay are being compared to others.

  1. scala> val license = """Subject of Agreement. ?Product?, as referred to in this Agreement, shall be the binary software package ?Sun VirtualBox,? which Product allows for creating multiple virtual computers, each with different operating systems (?Guest Computers?), on a physical computer with a specific operating system (?Host Computer?), to allow for installing and executing these Guest Computers simultaneously. The Product consists of executable files in machine code for the Solaris, Windows, Linux, and Mac?OS?X operating systems as well as other data files as required by the executable files at run-time and documentation in electronic form. The Product includes all documentation and updates provided to You by Sun under this Agreement and the terms of this Agreement will apply to all such documentation and updates unless a different license is provided with an update or documentation."""
  2. res0: RandomAccessSeq[Char] = 
  3. license: java.lang.String = ...
  4. scala> license count (_ == 'u')
  5. res1: Int = 37
  6. scala> license split ' ' count {_ == "and"
  7. res3: Int = 6
  8. scala> license ++ " this is silly!"
  9. res0: RandomAccessSeq[Char] = ...
  10. scala> license dropWhile { _ != 'y'} drop 1 takeWhile { _ != 'y'}
  11. res6: Seq[Char] = RandomAccessSeqTW( , s, o, ...
  12. scala> license forall {_ != 'z'}
  13. res8: Boolean = true
  14. scala> (1 until 5).init
  15. res0: scala.collection.immutable.Range = Range(1, 2, 3)
  16. scala> (1 until 5).head
  17. res1: Int = 1
  18. scala> (1 until 5).tail
  19. res2: scala.collection.immutable.IndexedSeq[Int] = Range(2, 3, 4)
  20. scala> (1 until 5).last
  21. res3: Int = 4
  22. scala> (1 until 5).headOption
  23. res4: Option[Int] = Some(1)
  24. scala> (1 until 5).lastOption
  25. res6: Option[Int] = Some(4)
  26. scala> license max   
  27. res8: Char = y
  28. scala> license min
  29. res9: Char =  
  30. scala> List() nonEmpty 
  31. res10: Boolean = false
  32. scala> List() isEmpty 
  33. res11: Boolean = true
  34. scala> license partialMap {case c if ('a' to 'z' contains c) => c}
  35. res13: scala.collection.immutable.IndexedSeq[Any] = IndexedSeq(u, b, j, e, c ...)
  36. scala> 1 to 10000 by 2 product 
  37. res19: Int = 481029393
  38. scala> 1 to 10000 by 2 sum                   
  39. res23: Int = 25000000
  40. scala> license partition {"aeiou" contains _}
  41. res20: (StringString) = (ueoeeeouaeeeoiieeeaeeia ....
  42. scala> license span {_ != 'a'}
  43. res22: (StringString) = (Subject of Agreement. ?Product?, ,as referred to in this Agreement, shall be the binary software package ?Sun VirtualBox,? which Product allows for creating multiple virtual computers, each with differ ...
  44. scala> val consonants = license withFilter {c => !("aeiuo" contains c)}
  45. consonants: scala.collection.immutable.StringOps#WithFilter = scala.collection.TraversableLike$WithFilter@78e8a591
  46. scala> consonants foreach print _                                      
  47. Sbjct f Agrmnt. ?Prdct?, s rfrrd t n ths Agrmnt, shll b th bnry sftwr pckg ?Sn VrtlBx,? whch Prdct llws fr crtng mltpl vrtl cmptrs, ch wth dffrnt prtng systms (?Gst Cmptrs?), n  physcl cmptr wth  spcfc prtng systm (?Hst Cmptr?), t llw fr nstllng nd xctng ths Gst Cmptrs smltnsly. Th Prdct cnssts f xctbl fls n mchn cd fr th Slrs, Wndws, Lnx, nd Mc?OS?X prtng systms s wll s thr dt fls s rqrd by th xctbl fls t rn-tm nd dcmnttn n lctrnc frm. Th Prdct nclds ll dcmnttn nd pdts prvdd t Y by Sn ndr ths Agrmnt nd th trms f ths Agrmnt wll pply t ll sch dcmnttn nd pdts nlss  dffrnt lcns s prvdd wth n pdt r dcmnttn.

IndexedSequense additions to Traversable:
  1. scala> '!' +: license    
  2. res33: String = !Subject of Agreement
  3. scala> "hello" +: license
  4. res32: scala.collection.immutable.IndexedSeq[Any] = IndexedSeq(hello, S, u, b, j, e, c, t,  , o, f,  , A, g, r, e, e, m, e, n, t, .,  , ?, P, r, o, d, u, c, t, ?, ,,  , a, s,  , r, e, f, e, r, r, e, d,  , t, o,  , i, n,  , t, h, i, s,  , A, g, r, e, e, m, e, n, t, ,,  , s, h, a, l, l,  , b, e,  , t, h, e,  , b, i, n, a, r, y,  , s, o, f, t, w, a, r, e,  , p, a, c, k, a, g, e,  , ?, S, u, n,  , V, i, r, t, u, a, l, B, o, x, ,, ?,  , w, h, i, c, h,  , P, r, o, d, u, c, t,  , a, l, l
  5. scala> license(11)
  6. res35: Char = A
  7. scala> license diff ("aeiou")
  8. res47: String = Sbjct f Agreement. ?Product?, s referred to n this Agreement, shall be the binary software package ?Sun VirtualBox,? which Product allows for creating multiple virtual computers, each with different operating systems (?Guest Computers?), on a physical computer with a specific operating system (?Host Computer?), to allow for installing and executing these Guest Computers simultaneously. The Product consists of executable files in machine code for the Solaris, Windows, Linux, and Mac?OS?X operating systems as well as other data files as required by the executable files at run-time and documentation in electronic form. The Product includes all documentation and updates provided to You by Sun under this Agreement and the terms of this Agreement will apply to all such documentation and updates unless a different license is provided with an update or documentation.
  9. scala> license dropRight(30)
  10. res48: String = Subject of Agreement. ?Product?, as referred to in this Agreement, shall be the binary software package ?Sun VirtualBox,? which Product allows for creating multiple virtual computers, each with different operating systems (?Guest Computers?), on a physical computer with a specific operating system (?Host Computer?), to allow for installing and executing these Guest Computers simultaneously. The Product consists of executable files in machine code for the Solaris, Windows, Linux, and Mac?OS?X operating systems as well as other data files as required by the executable files at run-time and documentation in electronic form. The Product includes all documentation and updates provided to You by Sun under this Agreement and the terms of this Agreement will apply to all such documentation and updates unless a different license is provided wi
  11. scala> license takeRight(10)
  12. res49: String = mentation.
  13. scala> license indexWhere { "aeiou" contains _} 
  14. res4: Int = 1
  15. scala> license lastIndexWhere { "aeiou" contains _}
  16. res6: Int = 873
  17. scala> List(1,2,3) flatten {0 to _}
  18. res7: List[Int] = List(0, 1, 0, 1, 2, 0, 1, 2, 3)
  19. scala> ' ' +: license zip license indexWhere {case (last, c) => "" + last + c == "an"}       
  20. res14: Int = 343
  21. scala> license indexOfSlice ("and")
  22. res17: Int = 342
  23. scala> ('a' to 'z') ++ ('A' to 'Z'
  24. res25: scala.collection.IndexedSeqView[Char,IndexedSeq[_]] = IndexedSeqViewA(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z)
  25. scala> license intersect res25
  26. res26: String = SubjectofAgrmnPdasihlywpkVBxvGCHTWLMOXqY
  27. scala> license diff res25     
  28. res27: String =   eeet. ?rouct?,  referred to n tis Agreement, shal be the binar softare acage ?Sun irtualo,? which Product allows for creating multiple irtual computers, each with different operating systems (?uest omputers?), on a physical computer with a specific operating system (?ost Computer?), to allow for installing and executing these Guest Computers simultaneously. he Product consists of executable files in machine code for the Solaris, indows, inux, and ac?S? operating systems as well as other data files as reuired by the executable files at run-time and documentation in electronic form. The Product includes all documentation and updates provided to ou by Sun under this Agreement and the terms of this Agreement will apply to all such documentation and updates unless a different license is provided with an update or documentation.
  29. scala> license filter res25
  30. < console>:7: error: type mismatch;
  31.  found   : scala.collection.IndexedSeqView[Char,IndexedSeq[_]]
  32.  required: (Char) => Boolean
  33.        license filter res25
  34.                       ^
  35. scala> license filter {res25 contains _}
  36. res29: String = SubjectofAgreementProductasreferredtointhisAgreementshallbethebinarysoftwarepackageSunVirtualBoxwhichProductallowsforcreatingmultiplevirtualcomputerseachwithdifferentoperatingsystemsGuestComputersonaphysicalcomputerwithaspecificoperatingsystemHostComputertoallowforinstallingandexecutingtheseGuestComputerssimultaneouslyTheProductconsistsofexecutablefilesinmachinecodefortheSolarisWindowsLinuxandMacOSXoperatingsystemsaswellasotherdatafilesasrequiredbytheexecutablefilesatruntimeanddocumentationinelectronicformTheProductincludesalldocumentationandupdatesprovidedtoYoubySununderthisAgreementandthetermsofthisAgreementwillapplytoallsuchdocumentationandupdatesunlessadifferentlicenseisprovidedwithanupdateordocumentation
  37. scala> license filterNot {res25 contains _}
  38. res30: String =   . ??,      ,       ? ,?        ,      (? ?),          (? ?),          .            , , ,  ??                -     .                                        .
  39. scala> license removeDuplicates
  40. res31: String = Subject ofAgrmn.?Pd,asihlywpkVBxv(GC)HTWLMOXq-Y
  41. scala> license segmentLength ({_ > 'A'},2) 
  42. res37: Int = 5
  43. scala> license drop 2 span {_ > 'A'} _1
  44. res41: String = bject
  45. scala> license sortWith Ordering.Char          
  46. res45: String =                                                                                                                                   (()),,,,,,,,,-....??????????AAAABCCCGGHLMOPPPPSSSSSTTVWXYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbccccccccccccccccccccccccccccccddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefffffffffffffffffggggggggggghhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijkllllllllllllllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooooooooooooooooooooooooooooooopppppppppppppppppppqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrsssssssssssssssssssssssssssssssssssssssssssssssttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvwwwwwwwwwwxxxxxyyyyyyyyy
  47. scala> 'a' to 'z' union ('A' to 'Z')
  48. scala> "hello world" patch (6, "goof", 5)
  49. res51: String = hello goof
  50. scala> "hello world" updated(0,'H')
  51. res54: String = Hello world

1 comment: