タグ

ブックマーク / tarao.hatenablog.com (6)

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

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

    関数の再帰的な定義に名前付けは必要か - 貳佰伍拾陸夜日記
  • コンパイル時計算でラムダ計算の構文解析器・評価器・型推論器を実現 (Scala 3編) - 貳佰伍拾陸夜日記

    またか. またなのか. 何回目だ. ということで, ラムダ計算のインタプリタの実装としては4回目くらい*1, コンパイル時計算でやるものとしても3回目くらいになってしまうけど, ラムダ計算の処理系をまた書いてしまった. 今回の目的は, Scala 3にはmatch typesという機能があり, これだけでチューリング完全なのではないか, というのを検証するため. また, 文字列リテラル型を操作する型レベル関数が3.1.2-RC1にきていて, これを使えば構文解析器だって書ける. 経緯 過去の事例 関数と返り値 パターンマッチと再帰呼出し Scala 3の型レベル言語 match types リテラル型操作 ラムダ計算の実装 評価 印字 構文解析 型推論 (型検査) おわりに 経緯 もともとは, id:xuweiさんが文字列リテラル型でコンパイル時に動作する構文解析器を実装していたのが始まり

    コンパイル時計算でラムダ計算の構文解析器・評価器・型推論器を実現 (Scala 3編) - 貳佰伍拾陸夜日記
  • 再帰的な構造のデータの同値性判定はどうしたらいいか - 貳佰伍拾陸夜日記

    数日前にTwitterで, JavaScriptのオブジェクトに対する===の挙動が初心者には難しいみたいな話を見かけた. 発端や周辺の議論をちゃんと追いかけてないからとくに出典は貼らない. たぶん元々の話は「へぇ, こういう挙動なんだ, 簡単ではないね」くらいの話だったのかもしれない. 自分のタイムラインの観測範囲では「そうだそうだ, (参照の同一性ではなく)同値性にしとけばいいのに」と思っている人もそれなりにいそうに見えた. 個人的にも同値性が簡単に確認できるとよい気はするものの, 「なんでそうしないんだ, オブジェクトの中身を確認していくだけだろ!」みたいな簡単な話ではないことも知っているため, 以下のようなツイートをしたのだった. JavaScriptのオブジェクトの同値性、再帰的な構造とか作るとぜんぜん自明じゃないんだよなぁ。リンクの構造は違うけどプロパティを辿ったときのパスはど

    再帰的な構造のデータの同値性判定はどうしたらいいか - 貳佰伍拾陸夜日記
  • テックリードの抱えるプレッシャとキャリアパス - 貳佰伍拾陸夜日記

    テックリードを過去に3年くらい, まだ「テックリード」という名称が社内で正式に制度化されていない頃も含めると6年くらいやっていて, 今はテックリードを若者に譲っていわゆるエンジニアリングマネージャ(社内での名称はいまのところ「グループチーフエンジニア」)をやっている. 現役テックリードの悩みを経験者として聞くと「そうそう, あるある」と思う一方で, まとめてみるとそれらは実はその先のキャリアパスに綺麗につながっていることに気づいた. 以下, 社内向けに書いたテックリードの抱えるプレッシャのまとめに, キャリアパスの話を加筆したもの. テックリードの悩み テックリードとして意思決定していくのはプレッシャだよねという話題が出た. テックリードに限らずあらゆる意思決定者に共通のことだとも思う. ぐいぐい引っぱっていくリーダタイプなのか, みんなの意見をうまいことまとめるサーバントリーダタイプなの

    テックリードの抱えるプレッシャとキャリアパス - 貳佰伍拾陸夜日記
  • なぜ型ファーストで考えるのか - 貳佰伍拾陸夜日記

    How do you imagine a building? You consciously create each aspect, puzzling over it in stages. Inception 型なし言語に馴染みはあるものの型付言語をいざ使ってみたらどういう気持ちで書いたらいいのかわからなかったと同僚から相談があり, それをきっかけにして社内の勉強会で以下の話をしました. よく型なし vs. 型付の文脈では「型を書くのは面倒だ」「安全の方が大事だ」「でも面倒だ」「それは型推論を前提にしていないからだ」などの議論になりがちな気がしますが、これはあくまで「計算ありきの型」を考えているからで, 「型ありきの計算」だと全く見え方が違います. 「型はある種の仕様」とおもえば, 型ファーストであることと, 型なし言語でテスト駆動開発(TDD)するときに最初にテストを書くこととは, 同じ

    なぜ型ファーストで考えるのか - 貳佰伍拾陸夜日記
  • 【はてなスタッフ非公式ブログバトン】 Haxeの善し悪し - 貳佰伍拾陸夜日記

    id:hatz48さんからバトンがまわってきました. 前々から個人的に興味があったので, 社内で言語の話題が出る度に「Haxe, Haxe」と言っていたら, 「Haxeと言えばtaraoさん」みたいになってて, なぜかHaxeについて書く羽目になってしまった. Haxeなんて1ミリも書いたことないのに! この記事は http://try.haxe.org/ でちょっと遊んだ程度のにわか知識で書かれております. もともとはよさげなAltJSを紹介していくみたいな文脈のようだけど, 個人的には特殊用途以外では素のJavaScript書いてりゃいいんじゃね, と思うので, 文脈無視で単純に言語/処理系の善し悪しについて書くよ! Haxeってなに http://haxe.org/ によれば「マルチプラットフォーム オープンソース プログラミング言語」らしい. AltJSなんてケチくさいこと言ってな

    【はてなスタッフ非公式ブログバトン】 Haxeの善し悪し - 貳佰伍拾陸夜日記
  • 1