プログラミング

Haskellのモナドいろいろ (まとめ)

記事一覧 Haskellのモナドいろいろ (1) - 滴了庵日録 Haskellのモナドいろいろ (2) - 滴了庵日録 Haskellのモナドいろいろ (3) - 滴了庵日録 Haskellのモナドいろいろ (4) - 滴了庵日録 分類 上記の記事で述べた8つのモナドは、2種類に分類できる。 失敗系:…

Haskellのモナドいろいろ (4)

Readerモナド Writerモナド Readerモナド Readerモナドは、読み取り専用のStateモナドのようなものである。 Stateモナドはグローバル変数のようなものとして利用できたが、 Readerモナドはグローバル定数のようなものとして利用できる。 Stateモナドでは状態…

Haskellのモナドいろいろ (3)

Stateモナド Stateモナド STモナドは runST で値のみを取り出せたが、Stateモナドは状態も取り出せる。値と状態を取り出すには runState を、値のみを取り出すには evalState を、状態のみを取り出すには execState を用いる。前の記事でSTモナドで実装した …

Haskellのモナドいろいろ (2)

IOモナド STモナド IOモナド IOはもちろんモナドである。 入出力という副作用を扱うために用いられる。 main も IO () という型の変数である。 (関数ではない)モナドだから return で値を中に入れることができる。 hoge::Int -> IO Int hoge x = return x ma…

Haskellのモナドいろいろ (1)

Listモナド Maybeモナド Eitherモナド Listモナド リストもモナドである。意外なことにリストもモナドである。 リストには要素数が0個の空リストがありうる。 これは後述するMaybe や Either における失敗の表現のようなものとも言える。モナドだから return…

多角形に関する計算

ソース全文はこちら → 多角形に関する計算 · GitHub 凸多角形か判定 # 凸多角形か判定 def isConvex(polygon): # n角形 n = len(polygon) # 時計回りまたは反時計回りで、隣接する辺のベクトルのクロス積がすべて同符号なら凸多角形 cp0 = 0 for i in range(…

アフィン変換とホモグラフィ変換

アフィン変換とホモグラフィ変換とは? アフィン変換について ホモグラフィ変換 (射影変換) について ホモグラフィ変換の特殊解を解析的に解く Pythonによる実装例 参考 アフィン変換とホモグラフィ変換とは? アフィン変換:正方形を任意の平行四辺形に写せ…

開発対象システム別の利用言語

いわゆるプログラミング言語ランキングみたいなやつはぜんぜん意味が無いと思っている。一口にプログラミング言語といっても、分野によって使われる言語の主流がぜんぜんちがうからだ。開発対象システム別の利用言語の比率というデータを見かけた。(これもや…

WindowsでRubyから呼び出せるC言語の共有ライブラリを作る

前提 RubyInstaller for Windows の Ruby+Devkit (x64) をインストールずみ C:\Ruby32-x64\msys64 に MSYS2がインストールされているものとする Clang(コンパイラ)のインストール C:\Ruby32-x64\msys64\msys2.exe のコンソールで下記のコマンドを実行 C:\Rub…

[Haskell]モナド則について

モナドを使うのに圏論の知識なんて不要だし、モナド則なんか意識する必要はない、というのはその通りだと思う。ぼく自身、圏論にはあまり興味は無いし深入りする気はないのだが、Haskellの珍妙な演算子と珍妙な関数名と謎のエラーメッセージを理解してコンパ…

[Haskell]Maybeモナドまとめ

エラーが起こる関数 次の関数 fb は負数を与えるとエラーになる。 -- フィボナッチ数列 fib:: Int -> Int fib 0 = 0 fib 1 = 1 fib n | n > 1 = fib (n - 2) + fib (n - 1) main = do print $ fib 20 -- 6765 print $ fib (-1) -- エラー そこでMaybeモナド …

PHPの配列変数の奇妙なふるまい

【注意】非常に今さらなお話です。 【注意】な言語のなコードでも、マネーを生んでるプロダクトには敬意を払うべきです。 copy on write まず、PHPの配列変数の代入文 (や引数渡し) はシャローコピーなのかディープコピーなのか? C言語をはじめ、JavaやC#な…

Haskellメモ:GHCのバージョン

状況 Windowsで、GHCupでGHCとstackほかをインストール C:\ghcup\ghc に GHC 9.4.8 と 9.6.4 がインストールされている %LOCALAPPDATA%\Programs\stack にもGHC 9.6.4 がインストールされている ghc --version だと version 9.4.8 stack ghc -- --version だ…

[Haskell]ソートアルゴリズムいろいろ

バブルソート -- 最小値を先頭に bubble [x] = [x] -- 要素1個ならそのまま bubble (x:xs) | x < y = x:y:ys -- 1個目が2個目以降の最小値より小さければ入れ替えなし | otherwise = y:x:ys -- そうでなければ1個目と2個目以降の最小値を入れ替える where (y…

Haskell備忘録

Haskell入門で最初に読むべきもの Haskell 超入門 #Haskell - Qiita ←まずこれを読んで練習問題をしっかりやる こわくないHaskell入門(初級) #Haskell - Qiita ←まあこういう考え方もある 『すごいHaskellたのしく学ぼう! 』 ←通称「すごいH本」 Haskellを…

メモ:Haskellの関数などいろいろ

リスト用の関数 length リストの要素数を返す sum リストの総和 product リストの総積 take リストの先頭 n 個を抽出 (例) take 2 [1,2,3,4,5] drop リストの先頭 n 個を落として抽出 (例) drop 2 [1,2,3,4,5] reverse リストを逆順にする map リストの全て…

[Haskell] VSCodeで開発

Haskellの開発環境の導入はGHCupで Haskellの開発環境の導入は Stackを用いる方法 と GHCupを用いる方法 があるが、VSCodeの拡張機能「Haskell for Visual Studio Code」を利用するなら GHCup を利用する。 VSCodeの拡張機能のインストール VSCodeの拡張機能…

[Haskell] GHCupのインストール

インストール 公式ページ( https://www.haskell.org/ghcup/ )にしたがい、PowerShellで下記を実行。 Set-ExecutionPolicy Bypass -Scope Process -Force;[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityP…

[Haskell] Windowsでstackのアンインストール

stackはどこにインストールされるか? C:\sr ←クソデカ C:\Users\xxxxx\AppData\Local\Programs\stack ←クソデカ C:\Users\xxxxx\AppData\Roaming\local\bin アンインストール手順 Windowsの「アプリと機能」で「Haskell Stack」を「アンインストール」 この…

Haskellのいとも奇妙なる演算子

Haskell は他の言語では見慣れない演算子が多々あって戸惑う。特に気になった主要なものをまとめる。 文脈で意味が異なる演算子・記法 &vert; (1) ガード条件(2) リスト内包表記の区切り (such that) (例) [func x &vert; x<-[1..9]](3) 列挙型の定義で列挙…

Haskell と C言語でバブルソートを比較

Haskell 非常に簡潔に書けるが、再帰を用いており慣れないと理解しづらい。 -- リストの最小値を先頭に上げる bubble [x] = [x] -- 要素1個ならそのまま bubble (x:xs) | x > y = y:x:ys -- 1個目が2個目以降の最小値より大きければ入れ替える | otherwise =…

WindowsでHaskellはじめるよ

Haskellのインストール ghci と runghc と ghc ghci の実行 (対話モード) runghc の実行 (スクリプト実行) ghc の実行 (コンパイル) プロジェクトの作成とビルド Haskellのインストール Haskellのインストールは stack を使う。他の方法もあるが、stackはツ…

【Rust】Rc と Cell と RefCell

Rustでは、ある値の所有権を持つことができるのは一つの変数のみである。所有権は譲渡できるが、同時に複数の変数が一つの値の所有権を持つことはできない。しかし、それでは困ることも多々ある。そこで Rc なるものが用意されている。 Rc<T> 複数の変数に所有</t>…

Qtウィジェットアプリ開発メモ

勝手の分からないことだらけなので、つれづれにメモ。 開発環境のインストール オープンソース版Qt の Qt Creator を使用 インストール時の「コンポーネントの選択」がやや分かりにくいが、「Qt」の中のバージョンを一つ選び (とりあえずベータ版でない最新…

PILの画素アクセスの高速化検討

PILのImageの画素に(x,y)座標でアクセスする速度を計測した。 目的 「Pythonでfor文を使ったら負け」とも言われるが、PILやOpenCVの画像処理機能を使わずに自前で画像処理を実装する場合、画素へのアクセスはどのような方法が高速かを比較検討する。 画素へ…

.NET SDKのバージョン確認とインストール

エラー NETSDK1045 Visual Studioでのビルド時に、必要な.NET SDKがインストールされていないと、エラー NETSDK1045 が発生する。 現在の .NET SDK は、ターゲットとする .NET Core 6.0 をサポートしていません。.NET Core 5.0 以下をターゲットとするか、.N…

Gitでサブモジュール

何ができるか? 外部の gitリポジトリを、自分の gitリポジトリのサブディレクトリとして登録し、特定のコミットを参照できる。ライブラリなどを参照する場合に便利である。 サブモジュールを登録する 自分の gitリポジトリで、ターミナルから下記のようなコ…

GitHubで迷子のコミット

GitHubのリポジトリで、https://github.com/ユーザ名/リポジトリ名/tree/ハッシュ値(40桁) にファイルは存在するが、Commits の一覧に現れない、迷子になってしまったコミットというのが存在しうる。コミットの属するブランチが削除された場合、そのコミット…

GCCでUTF-8なソースの文字列リテラルをShift-JISのバイナリにコンパイルする

やりたいこと UTF-8で保存されたC言語のソースファイル中の日本語文字列リテラルを、Shift-JIS(正確にはCP932)のバイナリにコンパイルしたい。使用するCコンパイラはGCCとする。 なぜやりたいか 今どきはソースファイルはUTF-8エンコードで保存するのが一般…

オーバーライドのおさらい (C++/C#/Javaの比較)

見た目がよく似た3つの言語で微妙に挙動が異なるのでまとめ。 C++の場合 #include <stdio.h> class BaseClass { public: void hoge() { printf("BaseClass::hoge\n"); } virtual void piyo() { printf("BaseClass::piyo\n"); } // 仮想関数 }; class SubClass : publi</stdio.h>…