scala ドキュメント
本家
http://docs.scala-lang.org/
少しは日本語もあるみたい。
Sbtビルドシステム
http://www.scala-sbt.org/0.13/docs/
play2
https://www.playframework.com/documentation/2.4.x/Home
goほど日本語で読めるのドキュメントがまとまってない感じ。
チュートリアルとか基本的なやつが特に。
scala 関数
scalaは関数がfirst classオブジェクトなので関数を引数に渡したり出来る。
今まで触ってきた言語(coq除く)は型なしの言語ばかりだったので、戸惑うこと多し。
def test(f:(Int => Int) { f(100) } test(x=>x+100) // Int = 200 test{x=>x+200} // Int 300 // 関数リテラルを引数で渡すときは、小括弧でも中括弧でもよいようだ。 //引数なしの関数リテラルを引数に渡したい場合。 def test2(g:(() => Int) { f() } // NG def test2(g: => Int) { f() } // NG def test2(g:(=>Int)) { f() }
Play2の trait Action は、
- Request型変数引数に取ってStatus型変数を返却する関数か、
- 引数を取らずに、Status型変数を返却する関数
を引数に取るようだけども、
宣言の読み方がまだちっとも分かってない。
trait Action[A] extends EssentialAction { ...
の[A]ってなんや。
javaの関数の引数違いのOverrideは
applyメソッドを引数や戻り値を違ったふうに何回も宣言するのか。
applyを特別扱いしてるので
Action.apply(パターン1)は Action(パターン1)と書けるらしいな。
scala
仕事でplay2を触るらしい。多分scalaではないと思うが。
いい機会だからscalaも触ってみようかと。
とりあえず、
class と object
var と valを 覚えた。
classとobjectの関係は、jsのobjectとプロトタイプみたいなもんらしい。
jsのプロトタイプって自分から使ったことねーけど。
勿論jsのプロトタイプメソッドは、thisを使えるから同じではない。
var は変更出来る変数。
val は変更出来ない変数。
根っこがjavaだから中途半端に見えるね。
制御構造が少ないとかなんとか書いてあるけど、わけわからんキーワードは大量にあるし、ごちゃごちゃしてて見通しは悪そう。
述語論理のタブロー法
先日のやつより、以下の量化子に対するタブロー規則が得られる。
- からが得られる。aは任意のパラメータでよい
- からTφ(a)が得られる。aはまだ使われてないパラメータでなければならない。
- F∀xφ(x)からTφ(a)が得られる。aはまだ使われてないパラメータでなければならない。
- F∃xφ(x)からTφ(a)が得られる。aは任意のパラメータでよい
空ゆえに真
一般に、Aが一つもなければ、命題「全てのAはBである」は必ず真になる。(専門用語では、「空ゆえに真(vacuously true)」という。)驚くかもしれないが、次の命題は真である。
- すべてのユニコーンは、五本足である。
この文に反証する唯一の方法は、少なくとも一頭の五本足ではないユニコーンを提示することであるが、ユニコーンは一頭もいないので、そのようなユニコーンを提示することは出来ない。だから次の命題も真。
- すべてのユニコーンは、六本足である。
すべてのユニコーンについてのどんなことも、それは空ゆえに真になる。一方、命題「全ての馬は六本足である。」という命題は偽だということが簡単に示せる。単に四本足の馬を連れてくればいい。