Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 3.24 KB | None | 0 0
  1. object signals {
  2.   println("Welcome to the Scala worksheet")       //> Welcome to the Scala worksheet
  3.  
  4.   // this is how one declares a class with three fields in Scala:
  5. case class Note(val amplitude: Double, val frequency: Double, val duration: Double = 1.0)
  6.  
  7. // a sample score for testing purposes:
  8. val symphony1 =
  9.    List(Note(3, 30), Note(3.1, 40, .25), Note(3.2, 10, .5),
  10.          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
  11.                                                   //| 5), Note(3.2,10.0,0.5), Note(2.1,5.0,-0.75), Note(15.9,2.0,1.0))
  12.  
  13.    //iterative for
  14.   def maxAmp1(score: List[Note]) = {
  15.      var result = 0.0
  16.      for(note <- score if 0 < note.amplitude){
  17.          result = note.amplitude
  18.          }
  19.      result
  20.   }                                               //> maxAmp1: (score: List[signals.Note])Double
  21.   println("Max amp = " + maxAmp1(symphony1))      //> Max amp = 15.9
  22.  
  23.  /*
  24.   def maxAmp2(score: List[Note]):Double = {
  25.       if (score == Nil) 0.0
  26.       else if (0 < score.head.amplitude) score.head.amplitude + amplitude(score.tail)
  27.       else amplitude(score.tail)
  28.       }
  29.    
  30.   }*/
  31.    
  32.   def maxAmp3(score: List[Note]) = {
  33.      def helper(result: Double, unseen: List[Note]): Double =
  34.         if (unseen == Nil) result
  35.         else if  (0 < unseen.head.duration)
  36.              helper(result + unseen.head.duration, unseen.tail)
  37.              else helper(result, unseen.tail)
  38.      helper(0.0, score)
  39.   }                                               //> maxAmp3: (score: List[signals.Note])Double
  40.  
  41.  def noise(note: Note) = note.duration < 0        //> noise: (note: signals.Note)Boolean
  42.  
  43.     def filterNoise(score: List[Note]): List[Note] = {
  44.      var result: List[Note] = Nil
  45.      for(note <- score) if (!noise(note)) result = result :+ note
  46.      result
  47.   }                                               //> filterNoise: (score: List[signals.Note])List[signals.Note]
  48.  
  49.   def filterNoise2(score: List[Note]): List[Note] = {
  50.   if (score == Nil) Nil
  51.   else if (noise(score.head)) filterNoise(score.tail)
  52.   else score.head :: filterNoise(score.tail)
  53.   }                                               //> filterNoise2: (score: List[signals.Note])List[signals.Note]
  54.     filterNoise(symphony1)                    //> res0: List[signals.Note] = List(Note(3.0,30.0,1.0), Note(3.1,40.0,0.25), No
  55.                                                   //| te(3.2,10.0,0.5), Note(15.9,2.0,1.0))
  56.                                                  
  57.                                                  
  58.   def filterNoise3(score: List[Note]): List[Note] = {
  59.   score.filter((n:Note) => !noise(n))
  60.  
  61.   }                                               //> filterNoise3: (score: List[signals.Note])List[signals.Note]
  62.     filterNoise2(symphony1)                       //> res1: List[signals.Note] = List(Note(3.0,30.0,1.0), Note(3.1,40.0,0.25), No
  63.                                                   //| te(3.2,10.0,0.5), Note(15.9,2.0,1.0))
  64.  
  65.   filterNoise3(symphony1)                         //> res2: List[signals.Note] = List(Note(3.0,30.0,1.0), Note(3.1,40.0,0.25), No
  66.                                                   //| te(3.2,10.0,0.5), Note(15.9,2.0,1.0))
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement