なんか考えてることとか

変な人が主にプログラミング関連で考えていることをまとめる。

Haskellで再帰を心置きなく書いて良い理由(補足編)

opaupafz2.hatenablog.com

前回、スタックメモリの観点からもHaskell再帰をしても良いと言う理由と再帰を書く際に気を付けなければならないことについて書いた。

今回は、その補足として「末尾再帰で書かざるを得ない状況」について書いていこうと思う。

続きを読む

Haskellで再帰を心置きなく書いて良い理由

Haskellのような純粋関数型プログラミング言語では基本破壊的代入が許されていないために、ループするための構文、または式が用意されていない。そのために、再帰を使ってループを表現する、というのが一般的となっている。

しかし、手続き型言語に慣れたプログラマからすれば、それはとても不安になることでもある。今回、なぜ不安になるのかどうかについて解説するとともに、なぜHaskellでは再帰を用いても問題ないのか書いていこうと思う。

続きを読む

なぜC言語のポインタは難しいと言われるのか

  • 2021/09/04 最後に補足を追加
  • 2021/09/05 「補足」項にて、ローカル文字列の注意点を追記

Cを学ぶにあたってよくぶち当たる壁と言われているのがポインタである。

なぜポインタは難しいと言われるのか?今回はそもそもポインタとは何なのかを交えてわかりやすくなるように努めて解説していこうと思う。

続きを読む

プログラミング言語であることの簡単な証明方法

  • 2021/08/12
    • Brainf*ckインタプリタのコードにミスを見つけたので修正
    • Brainf*ckはスタック指向ではないため「Brainf*ckはスタック指向である」旨の記述を削除

※注意※
今回の記事は人によって考えが異なる可能性のある内容が含まれています!
したがって今回の記事はあなたの納得できる内容であるとは限らないことを前もって言っておきます。

続きを読む

コピーセマンティクスとムーブセマンティクス

  • 2021/07/18
    • Rustのムーブによるエラーの解決策に参照を使った方法を追加
    • シャローコピーが採用されているプログラミング言語の例を記述

個人的に代入演算子=は甘く見ていると、自分の思っていた挙動とは違っていたために痛い目を見てしまうことが多いと思う。というのも、代入演算子=プログラミング言語によってさまざまな意味を持つためだ。

今回は、代入演算子=の挙動を理解する基本的なセマンティクスとしてコピーセマンティクスとムーブセマンティクスについて解説していこうと思う。

続きを読む

C言語でオブジェクト指向プログラミング

  • 2021/07/04
    • 載せたコードにミスがあったので修正
    • 「サブクラス」、「スーパークラス」を「派生クラス」、「基底クラス」に統一

前にRustはオブジェクト指向型言語ではないという記事を書いた後で、Twitterで以下のような発言をしていた。

今回はこれを有言実行しようと思う。

続きを読む

Pythonで始めるプロトタイプベースOOP

Pythonのクラスは他言語のクラスと比べると少し異質なものである。その性質は、プロトタイプベースオブジェクト指向プログラミング(以下OOP)をするには十分である。というわけでPythonでプロトタイプベースOOPをしてみる。

続きを読む