Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object signals {
- println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet
- // this is how one declares a class with three fields in Scala:
- case class Note(val amplitude: Double, val frequency: Double, val duration: Double = 1.0)
- // a sample score for testing purposes:
- val symphony1 =
- List(Note(3, 30), Note(3.1, 40, .25), Note(3.2, 10, .5),
- Note(2.1, 5, -.75), Note(15.9, 2)) //> symphony1 : List[signals.Note] = List(Note(3.0,30.0,1.0), Note(3.1,40.0,0.2
- //| 5), Note(3.2,10.0,0.5), Note(2.1,5.0,-0.75), Note(15.9,2.0,1.0))
- //iterative for
- def maxAmp1(score: List[Note]) = {
- var result = 0.0
- for(note <- score if 0 < note.amplitude){
- result = note.amplitude
- }
- result
- } //> maxAmp1: (score: List[signals.Note])Double
- println("Max amp = " + maxAmp1(symphony1)) //> Max amp = 15.9
- /*
- def maxAmp2(score: List[Note]):Double = {
- if (score == Nil) 0.0
- else if (0 < score.head.amplitude) score.head.amplitude + amplitude(score.tail)
- else amplitude(score.tail)
- }
- }*/
- def maxAmp3(score: List[Note]) = {
- def helper(result: Double, unseen: List[Note]): Double =
- if (unseen == Nil) result
- else if (0 < unseen.head.duration)
- helper(result + unseen.head.duration, unseen.tail)
- else helper(result, unseen.tail)
- helper(0.0, score)
- } //> maxAmp3: (score: List[signals.Note])Double
- def noise(note: Note) = note.duration < 0 //> noise: (note: signals.Note)Boolean
- def filterNoise(score: List[Note]): List[Note] = {
- var result: List[Note] = Nil
- for(note <- score) if (!noise(note)) result = result :+ note
- result
- } //> filterNoise: (score: List[signals.Note])List[signals.Note]
- def filterNoise2(score: List[Note]): List[Note] = {
- if (score == Nil) Nil
- else if (noise(score.head)) filterNoise(score.tail)
- else score.head :: filterNoise(score.tail)
- } //> filterNoise2: (score: List[signals.Note])List[signals.Note]
- filterNoise(symphony1) //> res0: List[signals.Note] = List(Note(3.0,30.0,1.0), Note(3.1,40.0,0.25), No
- //| te(3.2,10.0,0.5), Note(15.9,2.0,1.0))
- def filterNoise3(score: List[Note]): List[Note] = {
- score.filter((n:Note) => !noise(n))
- } //> filterNoise3: (score: List[signals.Note])List[signals.Note]
- filterNoise2(symphony1) //> res1: List[signals.Note] = List(Note(3.0,30.0,1.0), Note(3.1,40.0,0.25), No
- //| te(3.2,10.0,0.5), Note(15.9,2.0,1.0))
- filterNoise3(symphony1) //> res2: List[signals.Note] = List(Note(3.0,30.0,1.0), Note(3.1,40.0,0.25), No
- //| te(3.2,10.0,0.5), Note(15.9,2.0,1.0))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement