Training for D-Day

ブログの内容は個人の見解であり、所属する企業を代表するものではありません。

部分適用された関数(partially applied functions)

部分適用された関数


Scala、私にとっては、この辺からだんだん難しくなってくる。
「複数の引数がある場合に、あらかじめ引数の値を決めておき、あとから決まってない引数だけ指定して関数を呼び出せる」、ということという理解である。
「デフォルト引数ありの関数のもっと便利版」という理解でもいいかも知れない。


s.foreach(x => println(x))



s.foreach(println _)


上記の書き方を部分適用された関数(partially applied functions)と呼ぶ。
Scalaでは、必要な引数を渡して関数を呼び出すことを、”関数を引数に適用する”と考える(らしい)。


例えば

def sum(a:Int, b:Int, c:Int) = a + b + c

sum(1,2,3)
res1: Int = 6


と呼び出せる。

val a = sum _
a(1,2,3)
res2: Int = 6


でも同じ結果になる。

val a = sum _ 


と書くと、コンパイラが、

sumにapply(a:Int, b:Int, c:Int)


を自動生成してくれる。

例えば、第1引数だけ決まってない、第2、第3引数は決まっている場合は以下のように書ける

val a = sum(_,2,3)
a(1)
res3: Int = 6

val b = sum(_,2,_)
b(1,3)
res4: Int = 6

val c = sum(_,_,_)
c(1,2,3)
res5: Int = 6


これが部分適用された関数である。

すべてコンパイラのせいだ。

パッとは思いつかなかったが、これって結構応用できる感じがする。
引数を予め決めておきたい処理って結構あるし、テンプレートエンジンで大量のコードを書くときにも利用できそう。
どこかで使ったら載せようと思う。

コップ本読んでる。

Scalaスケーラブルプログラミング第3版

Scalaスケーラブルプログラミング第3版

【Scala】List(コレクション)をn個ずつの要素に分割する

List(コレクション)をn個ずつの要素に分割したい

ググり方が悪いのかさらっと出てこなかったため自作。
C#だと簡単だった。

qiita.com

例えば、以下の文字列が与えられ、

"あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や - ゆ - よ ら り る れ ろ わ を ん"

コード


5個づつの要素に分割して、以下のようにしたいとします。
(あ い う え お),(か き く け こ),...(わ を ん)


val source = "あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や - ゆ - よ ら り る れ ろ わ を ん" // 
val chunkSize = 5 // ---2

val list = source.split(" ").toList // --- 3
val ret = list.zipWithIndex.groupBy(s => s._2 / chunkSize).flatMap(x => List(x._2)) //  --- 4

ret.foreach(x => println(x)) // --- 5

解説

---2: 分割したい要素の個数
---3: スペース区切りの文字列をリストに変換
---4: zipWithIndexでindex付きでListをchunkSizeでグループ化し、そのままだとmapなので、flatMapでListに変換
---5:出力

出力結果

List((あ,0), (い,1), (う,2), (え,3), (お,4))
List((は,25), (ひ,26), (ふ,27), (へ,28), (ほ,29))
List((か,5), (き,6), (く,7), (け,8), (こ,9))
List((ま,30), (み,31), (む,32), (め,33), (も,34))
List((わ,45), (を,46), (ん,47))
List((さ,10), (し,11), (す,12), (せ,13), (そ,14))
List((や,35), (-,36), (ゆ,37), (-,38), (よ,39))
List((た,15), (ち,16), (つ,17), (て,18), (と,19))
List((ら,40), (り,41), (る,42), (れ,43), (ろ,44))
List((な,20), (に,21), (ぬ,22), (ね,23), (の,24))

並び順がよくわからなくなってしまった。なんでだろう。。

自宅での筋トレ(ダンベル)にメリハリをつけて長く続ける方法 -インターバルトレーニング-

私の場合、子供二人、嫁さんが看護師で、土日勤務の場合もあるので、なかなか決まった曜日にジムへ行くことが難しい環境におりました。
数年間はジムへ行けず、家で懸垂マシンのみに頼って筋トレしていましたが、もうすこしだけマシな筋トレがしたいと思っておりました。
懸垂マシンも家の中に置くと邪魔だと嫁さんに怒られたので、外においてあります。雨の日はできないです。


ジムへ行く時間もない、となると家にベンチやバーベルがほしかったのですが、これも場所を取られるし、結構値段もするので購入することはできませんでした。
そこで、ダンベルに目を向けました。ダンベルであれば少しだけ場所は取りますが、嫁さんが怒るほどではありません。
床だと傷がついて怒られるので、運良く畳の部屋があったので、畳の部屋で筋トレしています。


Amazonで調べて、以下のIROTECを活用しています。

上記は片方20kgですが、
私は片方30kgのものを購入しました。数年利用していますが、先端の締める部分が取りづらくなることはありますが、そこまで運用上困ったことはないです。値段も手頃ですし、おすすめです。



これまでダンベルメニューはやったことがなく、バーベルメインだったので、そのための本を買いました。

『自宅で、30分でできるダンベルトレーニング』

『自宅で、30分でできるダンベルトレーニング』

上記は、段階的に筋力負荷を高めていったり、痩せ型、細身型、マッチョ型体型別のメニューが乗っていたりして、非常に参考になりました。
ただ、普通にやってるとだれてきます。

そこで、大切なのがインターバルトレーニングです。
iPhoneの場合ですが、以下のAppを利用しています。
用はトレーニングにリズムをつける感じです。
40秒トレーニング、40秒休みを20セットほど続けます。

これをすることにより、トレーニング後の休み中にスマホを見て気がつくと5分くらい経ってしまうということを防ぎやすくなります。
また、1回のトレーニング時間がキッチリと何分以内、という感じで終わるため、メリハリもつけやすいです。

インターバルタイマーforトレーニング2Lite

インターバルタイマーforトレーニング2Lite

  • Yudai Fukuda
  • ヘルスケア/フィットネス
  • 無料


インターバルトレーニング、おすすめです。

ちなみにこの方法で、だいたい週1回(土or日)、3年6ヶ月ほど自宅筋トレを続けています。
週イチだと、筋力向上はあまり望めません。むしろ衰退していますが、衰退としても非常に緩やかな衰退になっていると感じます。

co-active coaching fulfillment コアクティブコーチング フルフィルメント

co-active coaching fulfillmentを受けてきました。
2019/04/27-29の平成最後のfulfillment。

響き。

二人(コーチとクライアント(相手))の関係性の中で響き合うメロディ。

メロディを奏でるために、お互いの心へディープダイブする。

潜る前には、自分自身にたっぷりの酸素を取り込まなきゃいけない。

酸素は、自分自身の生きる目的、勇気、そして羅針盤

自分自身が
"自分らしいとは何か"を問い続ける三日間でした。

大切にしているものは何か。
楽しいことは何か。
嫌いなことは何か。
何が許せないのか。
何が許せるか。

自分自身がわからないまま、相手にそれを問い続ける。

そこから生まれる軸。軸は自分自身に問いかけをくれます。

軸は自分自身を叱咤激励するんです。

そして、問い続けることで、自分自身が研ぎ澄まされ、自分自身が解明されていく。

自分と相手が"響く"ことで心が重なりあう。波長が合う。増幅される。1+1 > 2 が生まれる(ような気がするし、本当にそうかも知れない)

そんな素敵な三日間でした。
いろんなコーチングツールも教えてもらいましたが、それよりなにより、人の本質に向き合える瞬間。

素晴らしい仲間と出会えた、平成最後のfulfillment。

本当に感謝しかないですね。

前へ進む勇気、自分自身にピュアに従う勇気、立ち止まる勇気を貰えた気がします。

最後に直感でメモしたことが、

生きる
生きる
生きる

と3行、連なっていて、見返すとビックリしましたけど、
でも、fulfillmentってそうゆうことなんだなぁとしみじみ思いました。

CTIコーチング研修、おすすめです!!

www.thecoaches.co.jp

Scala 順列を求める

Scalaで、例えば、以下のような順列をすべて出したいとする。
0,1,2,3の順列なので、4!通り = 24通りの組み合わせ。

0,1,2,3
0,1,3,2
0,2,1,3

3,2,1,0

Scalaだと結構簡単で、以下のように書く。

・リストのインスタンス作成
・permutations.toListを呼ぶ

val a = List.range(0, 4)
a.permutations.toList

Scala ListBufferとArrayBufferの違い

Scalaでは、ListとArrayはいずれも要素の追加を行うことができません。 要素の追加を行いたい場合は、ListBufferもしくはArrayBufferを利用する必要があります。

ListBufferとArrayBufferの違いは、以下になります。

ListBuffer

ListBufferは、先頭への挿入、最後尾への追加性能良い。そのほかは要素数に比例。

ArrayBuffer

ArrayBufferは、最後尾への追加、任意の要素への参照(= 更新も ) が良い。 挿入や削除の性能は要素数に比例。

参考: www.ne.jp

以下書籍も参考にしました。:

ボクらのScala ~ 次世代Java徹底入門

ボクらのScala ~ 次世代Java徹底入門