So-net無料ブログ作成
検索選択

OCaml vs. Scala [演算子と値定義と関数] [Scala]

引き続き OCaml と Scala の対照表を。

演算子

OCaml Scala
整数 -3*(1+7)/2 mod 3 -3*(1+7)/2%3
実数 -1.0 /. 2.0 +. 1.9 -1.0 / 2.0 + 1.9
文字列 "Hello" ^ "World" "Hello" + "World"
真偽値 not true !true
true && true true && true
true || true true || true
リスト 1::[2;3] 1::List(2,3)
[1;2] @ [3;4] List(1,2) ::: List(3,4)
比較 x = y x == y
x <> y x != y
x >= y x >= y

値定義

OCaml Scala
変数定義 let x = 5 val x = 5
関数定義 let double x = x * 2 def double(x:int) = {x * 2}
再帰関数 let rec fact x = if x = 1 then 1 else x * fact (x - 1) def fact(x:int):int = {if (x == 1) 1 else x * fact(x - 1)}

関数

OCaml Scala
匿名関数 fun x -> x * 2 {x:int => x * 2}
fun x y -> x + y {(x:int, y:int) => x + y}
関数適用 f 1 f(1)
f 1 2 f(1, 2)

ちょっと良く分からないのはインタラクティブシェルで def add1(x:int) = {x + 1} と打つと型が add1: (scala.Int)scala.Int となるんだけど val add1 = {x:int => x + 1} と打つと型が add1: (scala.Int) => scala.Int = <function> となって異なっていること。うーん、なんか違うの?

2007-01-03追記: リスト同士の連結は Scala では concat メソッドでできたので追記しました。
2007-01-06追記: Scala でのリスト同士の連結は ::: 演算子のほうが簡潔なので変更しました。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0