Scala

Scalaの型パラメータ

連想リストからassocのScala版で、返り値を(Any,Any)とかやっちゃってたのはご指摘いただいたおかげで解決したんですけど、そもそも型パラメータとか、JavaのGenericsをよくわかってないのも混乱する原因だなと考え、下記を読んでみた。 刺激を求める技術者…

Scalaコップの会第0回やりました

10月13日、 Scala勉強会@東北 へ参加するための勉強会(w)であるScalaコップの会第0回をやりました。 8人集まったんですけど、ワンルームに8人だとちょっと熱かったですね。 最近一人で作業してると、夕方は寒いくらいだったんで、暖房が必要かなと思ってた…

Scalaコップの会第0回、2章から3章1までででた質問、意見など

思い起こしながら書いているので、一部間違ってたり、そんなこと言ってないというのが混じってるかもしれないです。 あと、自分が聞いてた範囲だけです。意外とつまずきが少なかったですね。 あと、当然というべきなのか、Javaがメインな方は、つまずくとこ…

連想リストからassoc

再帰の(ry 勉強の為なので、一連のコードは既にあるメソッドなんかも気にせず実装してます。 #Ruby配列の配列で require "pp" def assoc(item,dict) if dict.empty? nil else if item == dict.first.first dict.first else dict.shift assoc(item,dict) end …

Listのmember

再帰のべんきょ //Scala def member[T](item: T, lst: List[T]): List[T]={ if (lst.isEmpty) Nil else { if (item == lst.head) lst else member(item, lst.tail) } } println(member("Scala",List("Ruby","Perl","Python","Scala","Groovy","Java"))) //=>…

Listのreverse

再帰のべんきょ こっちのコードはコップ本から //Scala def reverse[T](lst: List[T]): List[T]= lst match { case List() => lst case head :: tail => reverse(tail) ::: List(head) } println(reverse(List(1,2,3))) //=>List(3,2,1) 末尾再帰。なってる…

Listのappend

再帰の(略 ちょうどコップ本に載ってたので、変数名以外コップ本に書いてあるまま。 //Scala def append[T](lst1: List[T], lst2: List[T]):List[T]= lst1 match{ case List() => lst2 case head :: tail => head :: append(tail,lst2) } println(append(Lis…

mのn乗

再帰の勉強 #Ruby def pow(m,n) if n == 0 then 1 else m * pow(m,n-1) end end puts pow(2,3) #=>8 //scala def pow(m: Int,n: Int):Int= if (n == 0) 1 else m * pow(m,n-1) println(pow(2,3)) //=>8

Listのlengthその2

もういっちょ #ruby def length(arr) def length_loop(arr,count=0) if arr.empty? then count else arr.shift length_loop(arr,count+1) end end length_loop(arr) end puts length [1,2,3,"a"] #=>4 //Scala def length[T](lst: List[T]):Int ={ def lengt…

Listのlength

再帰の勉強 #Ruby #Arrayで代用・・・ def length(arr) if arr.empty? then 0 else arr.shift 1 + length(arr) end end puts length [1,2,3,4] #=>4 ついでにScalaをちょっぴり勉強 //Scala def length(lst: List[Int]):Int = if (lst == Nil) 0 else length…

階乗その3

再帰の勉強 #Ruby def fact(n) def fact_loop(n, i=1, p=1) if i > n then p else fact_loop(n, i+1, p*i) end end fact_loop(n) end puts fact(5) #=>120 //Scala def fact(n: Int):Int={ def factLoop(n: Int, i: Int, p: Int):Int = if (i > n) p else fa…

最大公約数

再帰の勉強 #Ruby def gcd(m,n) if m % n == 0 then n else gcd(n, m % n) end end puts gcd(30,18) #=>6 //Scala def gcd(m: Int,n: Int):Int= if (m % n==0) n else gcd(n, m % n) println(gcd(30,18)) //=>6

Scalaのデフォルト引数

Scala勉強会@東北 第51回勉強会で途中まで読んだProgramming Scala(獏本) のChapter 2 Type Less Do Moreで出てきた話。デフォルト引数は Ruby みたいに仮引数に書くのではなく、多重定義すると。 //Scala2.7系 //code-examples/TypeLessDoMore/string-util…

Scalaコップの会第0回やるよ

10月13日(火)に、「Scala」に関する勉強会、Scalaコップの会第0回を行います。 平日夜2時間くらいを使っての勉強会です。 Scalaに興味があるという初学者(含む自分)で集まって、「Scalaスケーラブルプログラミング」(通称コップ本)を使用し、勉強していき…

フィボナッチ

id:h_sakuraiさんからフィボナッチも書いてみて下さい(もちろん再帰で)と言われたので書いてみた。 1.1 #フィボナッチ再帰 def fib n case n when 0 then 0 when 1 then 1 else fib(n-1)+fib(n-2) end end puts fib 10 #=>55 これ、でかい引数渡したらスタッ…

ViewImagesInFeed.scalaを読んでみた

ちょっと書いてみようと思っているものの為に、Scala勉強会@東北のみんなのコードから、ymnkさんのViewImagesInFeed.scalaを読んでみた。 で、最初に一言いっときます。 Scala勉強会@東北すばらしいです。というか、ymnkさんとか武田さんはじめ皆がしっか…

むむむむむむむ

Scala scala> def mystery(lst : List[Int]) = | (List[Int]() /: lst) ((x, y) => if (y % 2 == 0) x else x + y) warning: there were deprecation warnings; re-run with -deprecation for details mystery: (List[Int])List[Int] scala> mystery(List(1,…

mkstring

Scala scala> val lst=List(1,2,3) lst: List[Int] = List(1, 2, 3) scala> lst.mkString("|") res17: String = 1|2|3 scala> lst.mkString("[", "|", "]") res18: String = [1|2|3] Ruby >> array=[1,2,3] => [1, 2, 3] >> array.join("|") => "1|2|3" >> "…

Folding

Scala scala> def sum(lst: List[Int]) = (0 /: lst) ((x,y) => x+y) sum: (List[Int])Int scala> sum(List(1,2,3,4)) res10: Int = 10 ruby >> def sum(array) >> array.inject(0) {|sum,x| sum+x } >> end => nil >> sum([1,2,3,4]) => 10 Scala scala> de…

Tuples

Use methods _1 _2 etc. to access members (not zero-based!) ("Hello", 1729)._2 //is 1729 ふーん、なんで0からでないんだろう? scala> ("Hello",22,isEven) res9: (java.lang.String, Int, (Int) => Boolean) = (Hello,22,<function>)</function>

Methods with Function Parameters

Scala scala> val isEven = (x: Int) => x%2 == 0 isEven: (Int) => Boolean = <function> scala> List(2,3,5,7).partition(isEven) res8: (List[Int], List[Int]) = (List(2),List(3, 5, 7)) Ruby >> [2,3,5,7].partition {|x| x % 2 == 0 } => [[2], [3, 5, 7]]</function>

Access by Position

# () are used for indexed access—not [] List(17, 29)(1) //is 29 違和感の原因を一個発見。[]使いたくなる。慣れの問題ですな。

A Random Number List

depricationが出てらー。 scala> def randList(len: Int,n:Int)={ | val gen = new Random | 1 to len map((x:Int) => gen.nextInt(n)) | } warning: there were deprecation warnings; re-run with -deprecation for details randList: (Int,Int)RandomAcce…

Categories of List Methods

* Basic methods length head tail isEmpty * Operators :: ::: + - -- == != >= * Access by position (n) take drop dropRight slice indexOf lastIndexOf * Methods with unary predicates count exists dropWhile filter find findIndexOf forall partit…

Scalaでリファレンスからメソッド引く場合の定石

分かってるメソッド引く場合じゃなくて、こんな事出来るメソッド〜と当たりを付けたい場合。普通みんなどうしてるんだろう? Webのリファレンスで? EclipseやNetBeansで、補完候補表示させてそこから?RubyやRailsはhtml helpファイル(*.chm)で引いてて、割…

Application: Event Handling

scala> import java.awt._ import java.awt._ scala> import java.awt.event._ import java.awt.event._ scala> import javax.swing._ import javax.swing._ scala> implicit def mekeAction(action:(ActionEvent) =>Unit) = new ActionListener { | overrid…

Capturing the Enclosing Environment

scala> val n = 3 n: Int = 3 scala> val fun = (x:Int) => n *x fun: (Int) => Int = <function> scala> fun(2) res0: Int = 6 scala> def mulBy(n : Int) =(x:Int) => n * x mulBy: (Int)(Int) => Int scala> val quadruple = mulBy(4) quadruple: (Int) => Int = <function> s</function></function>…

/: :\

foldLeft っぽいやつと foldRight のエイリアス?

Functions as Parameters

はてなにScalaのシンタックスハイライト欲しいなあ。 Javaで代用は寂しい。 scala> val triple = (x: Int) => 3 *x triple: (Int) => Int = <function> scala> 1 to 10 map(triple) res0: RandomAccessSeq.Projection[Int] = RangeM(3, 6, 9, 12, 15, 18, 21, 24, 27, </function>…

valとvar

valが不変でvarが可変 //valでコンストラクタを定義 scala> class Person(val name:String) defined class Person scala> val p = new Person("Andy") p: Person = Person@72aa81 scala> p.name res0: String = Andy scala> p.name="John" <console>:6: error: reassi</console>…