Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
前回の記事は魔法のように見えるStateモナドの実装も、順を追って見ていけば理解することは難しくないという話でした。 しかし状態の変更を順番に処理するというような手続き的な考え方にかなり近い構造が、うまくモナドになってくれるというのは少し不思議ですよね。 この記事では タプル (a, b) 関数 a -> b カリー化 curry :: ((a, b) -> c) -> a -> b -> c uncurry :: (a -> b -> c) -> (a, b) -> c といったHaskellの基本的な要素が随伴と呼ばれる関係を構成することを見て、 その随伴からStateモナドが導かれることを説明していきたいと思います。 随伴 二つの圏 C, D と二つの関手 F : C \rightarrow D, G : D \rightarrow C が与えられたとしましょう。 もし GF = {
突然ですが、Stateモナドの実装を書けますか? Stateモナドは自由に読み書き可能なグローバル変数のような機能を、副作用を伴わない純粋な関数だけを使って実装するための便利な概念です。使うだけなら簡単なので普段から便利に利用してる人も多いかもしれませんが、いざ自分で実装しろと言われると手が止まってしまう方もいるのではないでしょうか。 今回はそんなStateモナドの実装を丁寧に見ていき、仕組みを理解することを目指したいと思います。 State さっそく以下に示すのがStateモナドの型の定義です[1]。 まずStateはnewtypeを使って関数と同じ型として定義されます。この関数は以下の構造を意識して作られています。 実行前後で状態の型は変わりませんが、値に関しては変更することが可能になっているのです。 モナドにするためにはFunctorとApplicativeのインスタンスにする必要が
しました。 かなり大幅な変更を導入し、パーサ関係もtoml::valueもほぼ全部書き換えたのですが、シンプルな使い方をしている場合は多分ほとんど変更なしでコンパイルが通ると思います。 ちょっと進んだ機能を使っていた場合は、色々と変更につき合わせるかと思いますが、その分新機能も多くあるので、お付き合いいただけると幸いです。 そもそもtoml11とは C++でTOMLファイルを扱うためのライブラリです。 その名の通りC++11以降をサポートしており、11, 14, 17, 20でテストしています。 もとはヘッダオンリーライブラリですが、コンパイル時間が長かったため、v4からはビルドする選択肢を追加しました。依然としてヘッダオンリーで使用できるのでご安心ください。 他のライブラリと比較した場合の特徴としては、 エラーメッセージがわかりやすい ファイル内の位置を含めた、わかりやすいエラーメッセー
DDD以外の設計手法についてご教示いただきたく、DDDの主張をある程度正確に理解した上でDDDをこき下ろしているイメージの強いくまぎさんに質問させていただきました。 最近はソフトウェアの設計について調べると、DDDについての記事ばかりで辟易する一方、私がエンジニアになった頃にDDDに勢いがあった影響もあって私自身DDD以外の良い設計とされているものを知らず、DDDに胡散臭さを感じつつもDDDの考え方にとらわれている、毒親の影響を受けた子供のような状態から抜け出せずにいます。 その最たる例がリポジトリパターンです。 よく依存性の逆転・DIと一緒に語られますが、くまぎさんがおっしゃる通り余計にインターフェースを切るのはイケてないと感じます。また、DI抜きにしても、リポトリパターン由来の様々な問題(N+1やバルクアップデート、管理画面用のメソッド生やしたくなる問題など)に対する解決策として提示さ
Java はスレッドごとにメソッドの呼び出しをスタックで管理している スタック = LIFOのデータ構造 例外を new すると、その時点のスタックの情報が例外に記録される スタックトレースは、このスタックの情報を出力したもの トレース = trace = 追跡 スタックを追跡するためのもの スタックトレースを読むと、その例外を投げたスレッドがどのようにプログラムを通り、どこで例外をスローしたかが分かる スタックトレースの読み方 初めて長大なスタックトレースを見るとビックリしてしまうかもしれないが、全部を読む必要は無い 「例外の発生箇所を特定する」という目的に対しては、一番重要なのはスタックトレースの先頭だけ スタックトレースの先頭行は、その例外が生成された場所 普通は throw new Exceptin() のように、生成と同時に例外をスローするので、例外が生成された場所=例外がスロー
F# dependency injection, the missing manualDependency injection management has historically been a trump card in object oriented languages like C# or Java. A galore of DI containers and frameworks has been developed, some aged well others didn’t, but they all look and feel more or less the same. You write code using constructor injection or property injection or service locator, then you register
この記事は Elm アドベントカレンダー2022 に投稿しています。 はじめに Elm Meetup で話したネタです。イベントでは5分間でかいつまんで発表したので、この記事でそれぞれの要素についてもう少し詳しく説明します。 当日の発表資料です 作ったもの ブラウザで動くルービックキューブを作成しました。下のリンクから実際に動かしていただけます。 動いている様子 使用した言語は Elm (v0.19.1) です。その他ライブラリとバージョンはこちらを参照してください。 注意 ルービックキューブのデータ構造は、ルービックキューブをソフトウェアで表現するための具体的な方法について述べています。 Elm を使った 3D オブジェクトの表現やアニメーションの実装方法などを知りたい場合は、3D オブジェクトの実装から読んでください。 コードは雰囲気を感じてもらうために掲載しています。厳密な定義をして
Written April 17, 2013 updated: May 20, 2013 Here's a simple value: And we know how to apply a function to this value: Simple enough. Lets extend this by saying that any value can be in a context. For now you can think of a context as a box that you can put a value in: Now when you apply a function to this value, you'll get different results depending on the context. This is the idea that Functors
TypeScript/JavaScriptで、ビット演算を使ってUIを制御する実装について書きます! 今回は基礎編として、入力項目とビットが1対1に対応するパターンについてデモコードを掘り下げながら解説します。 ビット演算とか二進数って何に使うの? と疑問に思う方にも知ってもらうことで、実際の現場でビット演算を使った実装がしやすくなればみんなハッピー⭐(多分)。 やりたいこと 解説用に👇のような簡単なデモを用意しました! 実際の動作やコードを確認しながら本文を読んでいただければと思います🙇 Yes/No で回答する何問かのアンケートを設けたい! ユーザーの回答に応じて固有の応答メッセージを表示したい! 応答メッセージをIF文で出し分けるのは冗長すぎる…… 回答を一意の値で扱えば簡単に応答メッセージを引き当てられる デモ: https://codesandbox.io/p/sandbox
並列化といえばHadoopだSparkだMPIだといったキーワードが世の中を賑わせているが、古典的な話としてゲームなどのグラフィクス処理界隈ではMMX命令などのSIMDを使う事なくデータ並列性を引き出すことによって高速化していた。 このテクの一部を扱った傑作記事が気づいたら検索で辿れなくなっていてWebArchive入りしてしまっていたので一つの機会として解説記事を書くことにした。 古株のエンジニアからすれば見慣れたテクニックではあるが知らない人から見るとパズルのような面白みがあり応用の幅もある面白いテクニックである。 複数のビットフィールドとは スーパーファミコンのように表示可能色が32,768色に制限されている環境というのは、内部的には1色を15bit(2^15=32,768)を使って表現している事が多い。当然この色数で自然界のあらゆる物を自然に描写するのは難しいが、ゲーム用途などでは
ゲームエンジンや3Dソフトウェアを利用して高度な表現ができるこの時代でも、プリミティブな描画や動き、アルゴリズムから学べることは多い。それらをJavaScriptで書くクリエイティブコーディングという形で学べる手引書が本書となる。
Preface About This Book Installing OCaml Introduction 1. Better Programming Through OCaml 1.1. The Past of OCaml 1.2. The Present of OCaml 1.3. Look to Your Future 1.4. A Brief History of CS 3110 1.5. Summary 2. The Basics of OCaml 2.1. The OCaml Toplevel 2.2. Compiling OCaml Programs 2.3. Expressions 2.4. Functions 2.5. Documentation 2.6. Printing 2.7. Debugging 2.8. Summary 2.9. Exercises OCaml
C# / .NET における、パフォーマンス改善の Tips をお届けします。 これを見れば、効率良く 80 点を取ることができるようになるはずです!
はじめに ある証券会社のサイトの証券用語「板寄せ」の解説にあったアルゴリズムに対して、実装バグ、すなわち「仕様を満たさない入力」が存在しないことを数学的に検証する形式検証を行ないました。 すると、実はその解説にはそもそも仕様バグ、すなわち「仕様そのものの間違い」が存在していることが分かりました。 そこで本記事では、元の解説の「仕様」に対してどこに仕様バグがあるのか、どのように改善すればいいのかを解説していきます。 ※私はフィンテックが独学であるため、専門用語の言い回しなどが稚拙な箇所があるかもしれません。あらかじめご了承ください。 本記事が参考にした板寄せアルゴリズムの解説は楽天証券/現物取引 取引ルール/板寄せですが、他にもマルサントレード/板寄せとは?などのサイトでも同じ仕様が記述されていました。 掲載されていた仕様 板寄せアルゴリズムが満たすべき仕様を引用したものが以下の3つです。
ソフト開発者は時と共に多数なプログラミング言語とその環境に触れて行きます。 最近私は Golang と Rust を覚えてここ三ヶ月ほぼフルタイムで使っています。こういう 「近代」な言語を実際なプロジェクトに用いて今まで使ってきた物を反省しながらある事 に気付きました。それは、「プログラミング言語」と「開発言語」の根本的な違い。この 記事はその違いを説明し、ある言語をその観点から分析する連載の最初です。続きは: Part 2: RustPart 3: Haskell「プログラミング言語」の概念の拡大さて「開発言語」とは何か。そして、「プログラミング言語」とはどう違うのでしょうか。 「言語」と言ったものとくると、その遅速・短長・難易・美しさなどで比較されます。ネッ ト上ではよくあれこれの言語のシンタックスなどを比べる記事も見られます。しかし、現 場でやるような開発となると、そういう表面的な事
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く