タグ

ブックマーク / yuroyoro.hatenablog.com (10)

  • (皿うどん)Structural Subtyping(構造的部分型)アレコレ - ( ꒪⌓꒪) ゆるよろ日記

    このまえ、夢の中でね、あるコレクションの中から特定のシグニチャを持つオブジェクトをより分けるようなコード書いてる夢見たんですよ。ええ、見たんです夢で。 で、ふと目が覚めて(深夜3時半)おもむろにREPLでいろいろやってみた結果を書こうと思います。ええ、書いてみます。 Structural Subtyping(構造的部分型)って何ぞ? 例から入ります。あるメソッドのシグニチャ(名前、引数の例えば{def mkString (start:String, sep:String, end:String):String}というシグニチャを持つ型Aを定義すると、上記のシグニチャを持つ型Bや型CはAの派生型と見なされるわけです。 このように、2つの型がもつメソッドなどの構造によって派生関係が決まるのがStructural Subtyping(構造的部分型)というものです。対して、通常のextendsなど

    (皿うどん)Structural Subtyping(構造的部分型)アレコレ - ( ꒪⌓꒪) ゆるよろ日記
    shomah4a
    shomah4a 2016/09/12
  • ぼくのかんがえたさいきょうのGit Repository Browser - ( ꒪⌓꒪) ゆるよろ日記

    こんなヤツ デモサイトはこちら http://gitterb.yuroyoro.net/ Gitである程度運用してると、ブランチがいっぱいになっていつどこから生えたのかわからなくなったり、どのブランチがマージされてるか把握できなかったりとかがあると思う。 たとえばgit log --graph とかgit merge-baseとかコマンドで頑張ればいいんだけど、俺はあまり頭良くないし記憶力もないので、コミットのつながりをグラフィカルに表示してほしいと常々思っていたわけ。 たとえばGitXとかgitkとかGit Towerとかのツリー表示って、こんな感じじゃないですか。 これはこれでまぁいいんだけど、この程度ならlog --graphやtigを使えばいいのでわざわざGUI起動するまでもないし、そもそもあんまりグラフィカルじゃない。見たいのは、Pro Gitとかにあるようなコミットを○と矢印で

    ぼくのかんがえたさいきょうのGit Repository Browser - ( ꒪⌓꒪) ゆるよろ日記
  • プログラミング言語「ほむほむ」 - ( ꒪⌓꒪) ゆるよろ日記

    なんか、極めると「ほむほむ」だけで会話できるみたいですね? 俺はまだそこまでの域には至ってないんですが、「ほむほむ」だけでプログラミングできたらステキですよね? そこで、ちょっと草植えときますね型言語 Grassを元にして以前作ったプログラミング言語「天使ちゃんマジ天使」とか 「ブブゼラ」をベースに、 またまたネタ言語を作りました。 Grassの文法と異なる点は以下のとおり。 wがほむ スペース・タブにはさまれた"ほむ"がW vは改行 wを出力するプログラム: ほむ ほむほむ ほむほむほむほむ xを出力するプログラム: ほむ ほむほむほむ ほむほむほむほむ ほむほむほむ ほむ "Hello, world!"を出力するプログラム ほむ ほむ ほむ ほむほむほむほむ ほむ ほむほむほむほむほむほむ ほむほむほむほむほむ ほむ ほむほむほむほむほむ ほむほむほむほむ ほむほむほむほむ ほむほむほ

    プログラミング言語「ほむほむ」 - ( ꒪⌓꒪) ゆるよろ日記
  • Scala的な考え方 - Scalaがとっつきにくいと思っている人へ - ( ꒪⌓꒪) ゆるよろ日記

    Javaな人から見ると、「Scalaって難しい」ってイメージがありますね。俺も最初はそう思ってました。今もですけど。 で、考えてみたんですが、何が難しいって考え方・イディオムになじみがないのが原因かと思ったんです。 ここでは、俺が今までScalaをやってきて得た考え方を紹介します。「Scalaをちょっとやってみたんだけど、とっつきにくくて…」と思われている方は、ぜひご一読ください。 参考資料: Scala入門 - Scalaで書きはじめたJava使い向け - Scala勉強会@東北 Dropbox - 404 神は言われた。「リストあれ。」 Lisperは、リストをどう作るかをまず考えるらしいです。適切なリストが出来たら、プログラムはもうできたも同然だと。同じ考え方は、Scalaでも通用すると思います。 大まかに、こんな流れで考えてます。(リストは最初から与えられることもあるでしょう) 「

    Scala的な考え方 - Scalaがとっつきにくいと思っている人へ - ( ꒪⌓꒪) ゆるよろ日記
  • Scalaの抽象構文木(abstract syntax tree、AST)をグラフィカルに表示するオプション - ( ꒪⌓꒪) ゆるよろ日記

    「そんなASTで大丈夫か?」 ということで、ほとんどの言語はプログラムの内部表現として抽象構文木(abstract syntax tree、AST)を作ると思います。Scalaももちろんコンパイルするときに作ります。 で、Scalaコンパイラが生成してるASTを見るオプションがあります。 "-Xprint:<phase>"オプションと"-Ybrowse:<phase>"オプションです。 こんなコードがあったとして、 case class Cell[T](v:T) { // TがInt型の場合にのみ呼び出せる def increment(implicit ev:T =:= Int ):Cell[Int] = Cell( v + 1 ) import java.text.SimpleDateFormat import java.util.Date // TがDateまたはそのサブタイプのときに

    Scalaの抽象構文木(abstract syntax tree、AST)をグラフィカルに表示するオプション - ( ꒪⌓꒪) ゆるよろ日記
    shomah4a
    shomah4a 2010/10/06
  • Scalaで&lt;:&lt;とか=:=を使ったgeneralized type constraintsがスゴすぎて感動した話 - ( ꒪⌓꒪) ゆるよろ日記

    Scala2.8から、Predefに<:<とか=:=とかが定義されていて、これなんだろ?とずーっと疑問だった訳ですよ。で、ついったーで質問投げてたらやっと理解できました。 教えて頂いた @ScalaTohoku さん、@okomok さん、@tioa さん、有り難うございました! "generalized type constraints"というヤツで、型パラメータに与えられた型が、特定の条件を満たす場合にのみ呼び出せるメソッドを定義できるというものです。しかもコンパイル時に静的にチェックされる!! これはスゴい!! What do <:<, <%<, and =:= mean in Scala 2.8, and where are they documented? - Stack Overflow =:=や<:<や<%<で特定の型のみ呼び出せるメソッドを定義する 具体的な例で説明します。

    Scalaで&lt;:&lt;とか=:=を使ったgeneralized type constraintsがスゴすぎて感動した話 - ( ꒪⌓꒪) ゆるよろ日記
    shomah4a
    shomah4a 2010/09/23
    これ使えば何とかなるような気がしなくもないような気がするかもしれない
  • ScalaのPartialFunctionが便利ですよ - ( ꒪⌓꒪) ゆるよろ日記

    Scalaには、PartialFunctionというものがあります。 直訳すると部分関数ですが、これはなにかっていうと「特定の引数に対しては結果を返すけど、結果を返せない引数もあるような中途半端な関数」です。 どうやって使うのん? まぁ、ちょっと例を見てましょうや。PartialFunctionであるfooPfは、引数が"foo"だったら"bar"を返して、"foo"以外は知らんというてきとーな関数です。 scala> val fooPf:PartialFunction[String,String] = { case "foo" => "bar" } fooPf: PartialFunction[String,String] = <function1> scala> fooPf("foo") res5: String = bar scala> fooPf("hoge") scala.Mat

    ScalaのPartialFunctionが便利ですよ - ( ꒪⌓꒪) ゆるよろ日記
    shomah4a
    shomah4a 2010/07/18
    こういうの格好いいよね
  • パターンマッチをもっと便利に - extractor(抽出子)による拡張 - ( ꒪⌓꒪) ゆるよろ日記

    パターンマッチは便利すぎてこれを覚えてしまうと他の言語でも欲しくてたまらなくなりますね。 Scalaのパターンマッチは、実はユーザーが独自のパターンを定義することが可能になっています。 extractor(抽出子)によるパターンの拡張 簡単な例を紹介します。java.util.Date型のオブジェクトを年月日に分解してパターンマッチさせたい、とします。こんな利用イメージです。 scala> new Date match { | case DateOf( y,m,d ) => println( "%d年%02d月%02d日" format( y,m,d ) ) | case _ => | } 2010年07月09日 "case DateOf( y,m,d) => ..."の部分で、Date型を年月日に分解しているわけです。ふつーにやろうとすると、DateOfというケースクラスを作ってimpl

    パターンマッチをもっと便利に - extractor(抽出子)による拡張 - ( ꒪⌓꒪) ゆるよろ日記
    shomah4a
    shomah4a 2010/07/18
    便利そうだから早速使ってみよう
  • OAuthプロトコルの中身をざっくり解説してみるよ - ( ꒪⌓꒪) ゆるよろ日記

    「おーおーっすっ!」 てなこって、TwitterAPIのBASIC認証も6月末に終了してOAuth/xAuthに移行するというこの時期に、あらためてOAuthについて勉強してみたんですのよ? OAuth認証を利用するライブラリは各言語で出そろってきてるのでそれを使えばいんじゃまいか? というと話が終わるので、じゃあそのライブラリの中身はなにやってんのよってことを、OAuthするScalaのライブラリ作りながら調べたことをまとめてみました。 間違っているところもあると思うのでツッコミ歓迎です>< OAuthってそもそもなんなの? ものすごくざっくりというと「API利用側が、ユーザ認証をAPI提供サービス側にやってもらうための仕様」って感じでしょうか? BASIC認証の場合、API利用側が認証に必要なアカウントやパスワードを預かる必要があるわけです。悪意のあるAPI利用側が「なんとかメーカー

    OAuthプロトコルの中身をざっくり解説してみるよ - ( ꒪⌓꒪) ゆるよろ日記
  • ScalaでWebAPIをたたいてXMLを処理するための定型パターンのまとめ - ( ꒪⌓꒪) ゆるよろ日記

    俺はLTなどの資料に使うためのネタ画像をTumblrで収集してるのですが、いざスライドに画像を貼ろうと思ったらTumblrから検索して落としてこなきゃいけなくてめんどくさいです。 ってことで、Tumblrから画像を落とすプログラムをscalaで書いてみました。 せっかくなので、この手のフィードのようなXML的なものをげとしてほげるための定型パターンをまとめたいと思います。 まぁ処理にもよりますが、だいたい50〜60行くらいでかけるので、scalaの練習にもちょうどいいと思います。 今まで書いたのは、Gistにおいてあります。 ゆろよろのGist もっといい書き方があるよ!って場合は、おしえてくだしあ>< URLとか引数とか 引数にIDをもらって、String#formatを使ってURLを生成します。 "http://hogehoge/%s".format( args.first ) XML

    ScalaでWebAPIをたたいてXMLを処理するための定型パターンのまとめ - ( ꒪⌓꒪) ゆるよろ日記
    shomah4a
    shomah4a 2010/05/02
    参考になりそう : scala で WebAPI を叩く方法まとめ
  • 1