My first impression of scala is that it’s too verbose. Thing that could be done in may be 1 line in haskell and 2 lines in erlang takes around 5-10 lines(Might not look like a big difference for 1 line but production codes easily span thousands of line even with the most expressive languages and here the factor is of 5). Anyways, I am still new so might not be my place to judge it.

Here goes implementation of some functions / practice problems in scala.

1. Pascal triangle such that pascal(r,c) such function return value at rth row and cth column

a. Haskel version used ZipWith [Signature ((A->A->A) -> [A] -> [A] -> [A]) which is not in scala so I wrote my own version.

(I don’t like the fact that I was not able to pattern match the arguments to map.. to do –> Find a way to pattern match the tuple)

def zipWith[A] (f: (A,A) => A, l1: List[A], l2: List[A]) : List [A] = { val zipList = l1.zip(l2) zipList.map(x=>f(x._1,x._2)) }

———————– Now goes my implementation of the above function —————————-

def pascal(c: Int, r: Int) : Int { def pascalH(pr: List[Int], currentRow :Int): List [Int] = { if (r==currentRow) pr else { val l1 = pr :+ 0 val l2 = List(0) ++ pr val next_list = zipWith((x:Int,y:Int)=> x+y), l1,l2) pascalH(next_list,cr+1) } val thePascalRow = pascalH(List(1),0) thePascalRow(c) }

—– Note that the helper definition works here because scala (as other functional languages) has lexical closure..

I am still new to scala to could not figure out how to use + instead of that lambda in the zipWith call — if you know please leave a comment