タグ

functionalに関するh-hiraiのブックマーク (143)

  • 関数の再帰的な定義に名前付けは必要か - 貳佰伍拾陸夜日記

    結論から言うと, 名前を付けることなく再帰的な関数を定義することは可能. 特定のプログラミング言語でどうかというよりは抽象概念としての関数の再帰を名前なしに実現可能かどうかという話(名前なしに実現できるプログラミング言語は存在するかという話). 発端 id:naoyaさんがこういうツイートをしていた. 再帰を書くときに何気なく関数に名前つけたり let で束縛したりしてたけど「再帰には三項関係が必要でありその実現には記号が質的に関わる」とあり、名前づけの行為が必然だったことが分かった。プログラミングするときの視点が変わるな— naoya (@naoya_ito) 2022年8月12日 たとえば以下のように書いたときのlet fact =みたいな話. let fact = n => n <= 1 ? 1 : n * fact(n-1) ちなみに, 話は一見逸れるけど, こう書けると必然的に

    関数の再帰的な定義に名前付けは必要か - 貳佰伍拾陸夜日記
    h-hirai
    h-hirai 2022/08/18
    若い頃に理解したくてできなくてあきらめたやつだ。
  • 関数型プログラミングが『銀の弾丸』であるという非常識な常識2022

    2024年バージョンの全面改定された新しいが公開されているので移動してください 関数型プログラミングをゼロからわかりやすく実用的に幅広い視点から解説!〜 圏論からFRPの構築まで a岡部 健Ken Okabekentutorialbook@gmail.com 関数型プログラミングが『銀の弾丸』である という非常識な常識 2022Functional Programming as the Silver bullet, that is the Insane common sense 2022

    h-hirai
    h-hirai 2021/12/10
    ざっとスクロールして妙な既視感を覚えて筆者名を確認したらあたっててがっくりきた。/ kenokabe先生のヤバさについては https://qiita.com/nonstarter/items/2763f5d85f2b8df3b18b とかも参考に。
  • 私と型システムとポエム

    最近巷では俄に型システムについての言及が増え、型システムポエマーが増えてる気がするので自分もその時流に乗りたい。 完全にポエムだけどなんかあったら随時指摘ください。直します。 TL;DR 言いたいことはまとめると次 型システムは程度問題なのでちょうどいいところを探すべき 型は万能でも強さが正義でもない(だから未だに研究されてる) よく知りもしないくせに計算機科学を侮辱するのはやめろ 予防線 あくまでポエムですので中身はないです 私は型理論専攻で学位はとったものの研究者ではないのであまり信用しすぎないように 型システムの過去 型システムは大まかに次のような利点があるとされてきた(個人的主観) 「異常」なプログラムを検出する仕組み 静的解析による分かりやすいエラーメッセージ 型そのもののドキュメント性 IDEでのcompletionに貢献 最適化に貢献 (数学に正しく裏打ちされたsemanti

    h-hirai
    h-hirai 2018/06/03
    静的に解析できるもんは静的に解析したほうがいいしあとはそのためにどこまで労力を割けるかという程度問題なのかなー、という最近の感想。
  • なぜfor文は禁止なのか?関数型記述のススメ - Qiita

    var totalOfEvenNumberUnder100 = 0; for (var i = 0; i < 100; i++) { if (i % 2 === 0) { totalOfEvenNumberUnder100 += i; } } 命題に、「繰り返す」という文字がないのに、forで繰り返しています。手続き型に慣れたプログラマは、もう違和感を感じなくなってしまっているかもしれませんが、なぜ繰り返すのでしょうか。0から100未満の数字がほしいだけなのに。 また、最初に0で変数を初期化するのも命題にはありません。 さらには、偶数のみを取り出す処理と足す処理が交互に行われることになっています。偶数のみを累計する、という命題とは違う処理になってしまっています。 もちろん答えは一緒ですが、命題とは別の処理になってしまっているともいえます。 推奨 できるだけ処理に名前をつけていきます。 命題

    なぜfor文は禁止なのか?関数型記述のススメ - Qiita
    h-hirai
    h-hirai 2018/04/02
    「お題の選びかたと論じ方にIQ145の美少女が...」ってコメント笑ったw
  • 関数型プログラマのためのRust | POSTD

    この投稿はEdward Z. Yangが2010年に書いた OCaml for Haskellers 、私自身が今年頭に書いた Haskell for OCaml programmers の流れに沿っています。 目次 プロローグ なぜRustを学ぶべきか 直接対応が可能なもの トレイト:Rustの型クラス アドホックなオブジェクトとメソッド 安全な参照 寿命と記憶域、そして管理オブジェクト オブジェクトの共有:RcとArc マクロとメタプログラミング リテラル 謝辞 参照 Copyright and licensing 注 : この記事の最新版は下記サイトで見られます。 http://science.raphael.poss.name/rust-for-functional-programmers.html 他のフォーマット: Source , PDF プロローグ C言語プログラマのための

    関数型プログラマのためのRust | POSTD
  • 型レベルズンドコキヨシ 2 - Qiita

    @ryoppy さんに先を越されてしまったが、こちらはマクロじゃなくて線形合同法でやってみます。 定式化 オリジナルのズンドコキヨシは 「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた ですが、今回は型レベルで実装したいので、もう少し問題を定式化する必要があります。 ここでは、以下をズンドコキヨシと定義して解くことにします。 定数A, C, Mおよび初期値$X_0$, 閾値Tを与え、次の式でズンドコ列{$Zn$}を生成する (線形合同法) $X_{n+1} = (AX_n+C)modM$ に対し、$Xn >= T$ならズン, $Xn < T$ならドコ $Z_{n-3}, Z_{n-2}, Z_{n-1}, Z_{n}$ = ズン, ズン, ズン, ドコをみたす$n$が

    型レベルズンドコキヨシ 2 - Qiita
    h-hirai
    h-hirai 2016/03/28
    いや、もう、なんだこれ。
  • http://kwatch.houkagoteatime.net/blog/2015/08/30/why-is-functional-lang-so-hard/

    h-hirai
    h-hirai 2015/08/31
    『ふつうのHaskellプログラミング』のことも思い出してあげてください……。
  • 『マンガでわかる!関数型プログラミング』という漫画を連載することになるようです - Line 1: Error: Invalid Blog('by Esehara' )

    近況 ふとした瞬間に虚しくなることがある いきさつ 今年、秀和システムから関数型プログラミングに関するが出て、良くも悪くも、そのが注目を集めることになってしまいました。そんな中で色々な人が反応していましたし、自分もこのようなかたちで感想を書きました。 一方で、このようなを書かれるくらいであるならば、自分で真っ当なを書けばいいわけだし、技術書を書くことなんて、そんな敷居の高いことではないというカウンターもあり、個人的にはそれも最もだなあ、という印象がありました。その中で自分なりに関数型プログラミングについて理解したことを元にQiitaに駄文をアップしたりしていました。間違ってたら、誰かが訂正してくれるだろうし、そのほうが自分にとって勉強になるだろう、と思うので。 ですが、「関数型プログラミング」というのは「なんだか難しい」という印象を覚えるのも事実のようです。実際に、最新の『Soft

    『マンガでわかる!関数型プログラミング』という漫画を連載することになるようです - Line 1: Error: Invalid Blog('by Esehara' )
    h-hirai
    h-hirai 2015/07/13
    「描いてみたくなってきた(((o(*゚▽゚*)o)))」ってついっとして5分で出版社からレスポンスあるひともあまりいなかろーなーw
  • 代数的データ型について #w8lt

    AWSの各種サービス紹介と活用方法 − AI・ML活用デモを交えて − / 20231208aws-aiml-seminar

    代数的データ型について #w8lt
    h-hirai
    h-hirai 2015/05/29
    圏論のスライドやった (挫折
  • 「関数型言語」に関するFAQ形式の一般的説明 - Qiita

    前置き: 特定の言語ではなく、関数型言語一般に関する説明です。 ここに書くのが良いのかわかりませんが、それを考える時間ももったいないのでとりあえず書きます。必要が生じたら移転します。 皆様のご要望や自分の気分(?)により随時加筆修正します。 「それは違うんじゃない?」というご指摘はもちろん、初心者の方の素朴な疑問・質問や、「ここがよくわからない」「こういうことも書いてほしい」みたいなコメントも歓迎します。すぐに対応できない場合もあると思いますがすみません。Twitterのesumii宛でも構いませんが、コメントのほうが他の方も見つけやすくて良いと思います。当然ながら(他者に対しても)誹謗中傷等はご遠慮ください。 いただいたコメントはほぼ文に反映していますので、文を読むために、必ずしもコメントを読む必要はありません。もちろん、興味と余裕(?)があればコメントも読んでいただければ非常に有用

    「関数型言語」に関するFAQ形式の一般的説明 - Qiita
    h-hirai
    h-hirai 2015/01/28
    もうコメントがこんなについてる。どのコメントも勉強になるし、建設的で心が洗われるようだ。
  • 絶対に理解出来ないモナドチュートリアル - konn-san.com

    世の中には、恐しい数のモナドチュートリアルがあって、それぞれモナドは象だとか、いや接ぎ木だ とか、プログラマブル・コンテナだとか、プログラム可能なセミコロンだとか、色々な説明がなされている。「モナド チュートリアル」で検索すれば、他にも色々に絵解きされた有象無象のモナドが大量に引っ掛かる。そうそう、モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?なんてのもあったな。 この記事の目的は別に、こうした既存のモナドチュートリアルを「間違ってる!」とか「わかるわけねーよ!」といって貶そうという訳ではない。実際、既に幾多書かれているチュートリアルの中でも、僕の云いたいことと殆んど同じようなことが書かれているものは沢山ある。 では、上の膨大なリストの末尾にまた一つ「わかりやすい比喩」を付け足そうというのか?というとそういう訳でもない。そうそう、モナドは比喩ではないというチュートリアル

    h-hirai
    h-hirai 2015/01/17
    なんでか、ぶくましてなかった。
  • Unlambda -Function Coding-

    関数のつくりかた 簡単な関数をつくる 例えば、引数Fを受け取って、 `Fiを評価して返す、という関数を作ってみましょう。 いろいろ考えてみると、次の式でできそうだと判ってきます*。 * 判らなくても、全く問題はありません……むしろこの項の重要性がより増すでしょう。 ``si`ki この程度の簡単な関数なら、頭で少し考えればつくれます。 しかし、私はその「頭で考える」過程を説明できる自信はありません。 ほとんどの方も同様だと思われます。 さらに、例えば「引数をXYZの三つ受け取って、 ```YZ`XY`ZXを返す」 などという関数を頭の中で思い描けるでしょうか。 少なくとも私は無理ですし、他の人ができたとしてもその説明を聞いて理解できるとは思えません。 このような複雑な関数を生成するための方法というものが存在します。 この項では、その方法を解説していきます。 擬似関数の書き方 この項で使用す

    h-hirai
    h-hirai 2013/09/08
    λ式からSKIへの変換
  • Java 8は関数型なのか

    ITproの読者には既にご存じの方も多いと思うが、2014年3月に「Java SE」の次期版「Java SE 8」(以下、Java 8)がリリース予定である。国内のエンタープライズ分野では「レガシーJava」が多いとされ、現行版の「Java SE 7」に移行しているユーザーすら少数派と聞く。Java 8といっても遠い話のように感じる方も多いかもしれない。 しかし、Java 8はJavaにとって一つの大きなマイルストーンとなる。関数型プログラミングに由来する「ラムダ(lambda)式」なる構文が導入されるのだ。 Javaをよく知る技術者の方の中には、「いや、Java 8のラムダ式は関数型プログラミングのために導入されたのではない」と主張される方がいるだろう。この点については後ほど触れたいと思うが、「ラムダ式が何のために導入されたか」はさておき、ラムダ式という記法そのものが「関数型に由来する」

    Java 8は関数型なのか
    h-hirai
    h-hirai 2013/07/17
    あう、そんな時間ないのに全部読んじまった。おもしろい記事でした。
  • モナドの六つの系統[Functor x Functor] - モナドとわたしとコモナド

    モナドは「アクション」を表す抽象的な構造である。モナドは、Haskellにさまざまな概念に対する記述能力をもたらす。 モナドの基礎 return :: a -> m a: 純粋な値をモナドで包む。 m >>= f :: m a -> (a -> m b) -> m b: モナドmに包まれた値をfに渡し、その結果として現れたモナドを結合する。 固有アクション: それぞれのモナドに固有の方法でモナドを生み出す。 実行: モナドに包まれた値を、より根源的な形に還元する。 モナド則 モナドに以下の三つの制約を課すことによって、最低限度の記述能力を保証している。 return a >>= k == k a m >>= return == m m >>= (\x -> k x >>= h) == (m >>= k) >>= h より強い制約は、より強い力を生み出す。 モナドの分類 モナドは、以下の6つ

    モナドの六つの系統[Functor x Functor] - モナドとわたしとコモナド
  • 8つの質問で、Lazy K業界の現状を知る - モナドとわたしとコモナド

    Lazy系の会社の隆盛があって、仕様が定められたのが8年ぐらい前だろうか。 コンビネータ産業の人材動向が、今どうなってるかって? 大方の予想より凄惨ですよ。 それが分かる方法がある。Lazy K技術者に技術力を問う8つの質問によってだ。 Lazy K業界のエンジニアの平均レベルを知りたくって、いろんな会社さんのLazy K開発者(経験者)向けに以下のようなつ8の質問をしていない。 その8つの質問というのはこんな問題だ。 Lazy K技術者に技術力を問う8の質問 ラムダ抽象ではなくコンビネータで表現するメリットを一言で表してください。(筆記回答) 入出力の終端を表現する方法は何ですか?(筆記回答) チャーチエンコーディングとスコットエンコーディングの違いを端的に説明してください。(筆記回答) 任意の関数に対して不動点を求めるコードはどれですか?(選択回答) S I I (S (S (K S)

    8つの質問で、Lazy K業界の現状を知る - モナドとわたしとコモナド
    h-hirai
    h-hirai 2013/03/19
    なにこれこわいちかよらんとこ
  • ヘッズのための純粋関数型言語「Lazy SLYR」 - モナドとわたしとコモナド

    ドーモ、変数スレイヤーです。 Brainf*ckめいた派生言語が作られる前に、ニンジャスレイヤーを基にしたニンジャヘッズのための言語「Lazy SLYR」を作ってみた。 ◆Brainfuck派生ではない◆ ◆Lazy K派生でもない◆ ◆独自性重点◆ ◆純粋な◆ Hello, world! イヤーッ!イヤーッ!イヤーッ!グワーッ!グワーッ!グワーッ!イヤーッ!イヤーッ!イヤーッ!グワーッ!イヤーッ!グワーッ!グワーッ!イヤーッ!イヤーッ!イヤーッ!グワーッ!イヤーッ!グワーッ!グワーッ!イヤーッ!イヤーッ!イヤーッ!グワーッ!グワーッ!グワーッ!イヤーッ!イヤーッ!イヤーッ!グワーッ!イヤーッ!グワーッ!グワーッ!イヤーッ!イヤーッ!イヤーッ!グワーッ!グワーッ!グワーッ!イヤーッ!グワーッ!イヤーッ!グワーッ!グワーッ!イヤーッ!イヤーッ!グワーッ!グワーッ!グワーッ!イヤーッ!イヤーッ

    ヘッズのための純粋関数型言語「Lazy SLYR」 - モナドとわたしとコモナド
  • ことりちゃん誕生物語 またはbleis氏は如何にしてことりちゃんを愛するようになったのか - みずぴー日記

    この記事はLL/ML Advent Calendarの4日目です。 LL/ML Advent Calendarの首謀者のひとりである@bleisさんが、最近スライドに貼りまくっていることりちゃんがどのように誕生したかについて書いてみようと思います。 ※ 記憶に基づくものなので、一部事実と異なる可能性があります。 その前に ことりちゃんの画像については、自由に転載・改変していただいてかまいません。 またオリジナルサイズの画像は以下にあります。 http://f.hatena.ne.jp/mzp/20121206231515 http://f.hatena.ne.jp/mzp/20121206231514 はじまり そもそもの発端は、@dico_lequeさんがモナド/do記法の薄いを書いていることまでさかのぼります。 mzp「内容はでこちゃんだから問題ないとしても、たぶん地味な内容になるの

    ことりちゃん誕生物語 またはbleis氏は如何にしてことりちゃんを愛するようになったのか - みずぴー日記
    h-hirai
    h-hirai 2012/12/04
    8割りがた、みずぴーさんの提案にぐるぐるさんが「はい」って言ってるだけのよーな……。そしてでこれきさんが完全に無関係だ。
  • プログラム・プロムナード/Haskellプログラミング-情報処理学会

    会誌「情報処理」連載の「プログラム・プロムナード」(2002年4月~2005年3月掲載)と「Haskellプログラミング」(2005年4月~2006年3月掲載)はどなたでもご覧になれます。ファイルはすべてPDF形式です。 「Haskellプログラミング」に掲載されたプログラムは http://www.sampou.org/haskell/ipsj/から取ることができます.

    プログラム・プロムナード/Haskellプログラミング-情報処理学会
  • Functional programming is a ghetto

    This was originally posted by Michael O'Church on his blog. -- Functional programming is a ghetto. Before any flamewars can start, let me explain exactly what I mean. I don’t mean “functional programming sucks”. Far from it. The opposite, actually. Not all ghettos are poor, crime-ridden, and miserable. Jewish ghettos existed for centuries in Europe, from the Renaissance to World War II, and many w

    h-hirai
    h-hirai 2012/07/24
    「ユダヤのゲットーはルネサンスから二次大戦までの数世紀の間、ヨーロッパに存在し、多くは、世界の知的な中心地であった。いくつかは相当に繁栄していた。」まで読んだ。
  • はてなブログ | 無料ブログを作成しよう

    来年も作りたい!ふきのとう料理を満喫した 2024年春の記録 春は自炊が楽しい季節 1年の中で最も自炊が楽しい季節は春だと思う。スーパーの棚にやわらかな色合いの野菜が並ぶと自然とこころが弾む。 中でもときめくのは山菜だ。早いと2月下旬ごろから並び始めるそれは、タラの芽、ふきのとうと続き、桜の頃にはうるい、ウド、こ…

    はてなブログ | 無料ブログを作成しよう