2018-01-01から1ヶ月間の記事一覧

【関数型言語】使いどころ

関数型言語の勉強中。関数型言語とはどういうものかを理解するのに四苦八苦。命令型言語と比べてどんな特徴があるのかと言う観点で学んでいる。しかし、本当に知りたいのは、どういう場合に関数型言語使うべきかということ。 ナップサック問題、サラリーマン…

【関数型言語】使いどころ

関数型言語の勉強中。関数型言語とはどういうものかを理解するのに四苦八苦。命令型言語と比べてどんな特徴があるのかと言う観点で学んでいる。しかし、本当に知りたいのは、どういう場合に関数型言語使うべきかということ。 ナップサック問題、サラリーマン…

【関数型言語】学ぶ目的・メリット

単なる好奇心ももちろんある。関数型言語って何ぞ? 実用的な観点として、次のようなもの 最近はプロセッサがマルチコアになり、またスケーラブルなシステムにするためにクラウド上にクラスタを作って動かすシステムが増えている。処理速度を上げるために、…

【関数型言語】継続渡し(CPS:Continuation-passing style)

計算途中の文脈(コンテキスト)を保存し、任意のタイミングで計算を途中から継続できるようにするしくみらしい。 ここで生じた疑問。 コンテキストとは具体的にはどのような内容なのか? OSのコンテキストスイッチの場合、 各種レジスタの内容 スタックの内…

【関数型言語】ファンクター(関手)

「すごいHaskell楽しく学ぼう!」 第11章「ファンクターからアプリカティブファンクターへ」 11.1 「帰ってきたファンクター」より。 ファンクターとは関数で写せるもののことです。 ファンクターの型クラスメソッドは一つだけで、それは fmap です。fmap の…

【関数型言語】Haskell と Scala の畳み込み関数

Scala とHaskell を比較しながら学んでいる。畳み込み関数について、全く違った表記があった。 Scala では foldLeft ではなく foldRight がスタックオーバーフローの危険がある。 Haskell では foldr ではなく foldl がスタックオーバーフローの危険がある。…

2018年01月04日のツイート

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

【関数型言語】IntelliJ での fpinscala の練習問題を解く環境

演習問題をビルド・実行する環境をどうしたものかと思っていた。演習問題以外のソースコード(テキストに載っている List や Option など)を打ち込まないとビルドできないからだ。だが、いいページを見つけた。感謝。 qiita.com ubuntu でも問題なく下記の…

【関数型言語】名前渡し(call by name) と必要渡し(call bye need)

Scala 関数型デザイン&プログラミング http://amzn.asia/bIfSCQS の「第5章 正格と遅延」に Scalaの非正格かんすうは引数を値渡しではなく名前渡しでうけとります。 という記述があった。「名前渡し」は初めて聞いたので、ぐぐった。 引数の値渡しと名前渡…

【関数型言語】例外を使わないエラー処理

Scala では Option/ Either型を使う。 Hakell だと Maybe/Eitherモナドを使うらしい。 C++17だと optional - cpprefjp C++日本語リファレンス javascript だとMaybe/ Eitherモナド。 elixir:通常はタプルを返すが、Option/Either と同等?要調査。 ==> elix…

【関数型言語】promiseとかfutureとか

恥ずかしながら、今日初めて promise とか future を知った(汗 postd.cc qiita.com okapies.hateblo.jp 非同期処理を行うための機能らしい。今どきの言語は大抵持っているとか(大汗 Scala Java Javascript C++ Haskell と elixir については、該当機能があ…

【関数型言語】CPS(継続渡し)と末尾再帰最適化

ループと再帰 関数型言語ではループを再帰で表す(ことがおおい)らしい。だが、再帰はスタックオーバーフローする危険がある。それを避けるには、末尾再帰最適化をすればよい。これを使うと、再帰呼び出しにもかかわらず、スタックを消費しない。 scala, ha…