プログラミングに関するtaniminaのブックマーク (53)

  • リレーションとリレーションシップの誤用に注意 - 設計者の発言

    RDBやデータモデリングに関する説明の中で「リレーションシップ」と言うべきところで「リレーション」と表現する誤用が目立つ。どうでもいいような違いに思われるかもしれないが、これらは明確に区別されるべきだ。そうでないと、RDBの用語の意味がわからなくなるからだ。 IBMのフェローであったE.F.コッド(1923-2003)による1970年のの歴史的論文 "A Relational Model of Data for Large Shared Data Banks" (大規模共有データバンク向けデータのリレーショナル・モデル。杉さんによる対訳)によって、世界で初めてRDBの理論的枠組みが示された。この論文で使われている用語"relation"が、RDB(relational database)の呼称の由来である。 relationとは何か。その論文でコッド博士は、1個のテーブルに格納された行(

    リレーションとリレーションシップの誤用に注意 - 設計者の発言
    tanimina
    tanimina 2023/02/02
    「関係」が数学用語での「関係 relation」(n項関係をタプルの集合で表したもの)である事が、あまり理解されていないような。データを「関係」で表せばデータ問い合わせが集合演算になるというのがコッドの元のアイデア。
  • privateメソッドをテストしたい - 日々常々

    と思うのは、とてもいいこと。 前置き もし行いたいテストが外的振る舞いを示すものであれば(少なくともテストにより観測できる見通しがなければ「テストしたい」とは思わないだろうから、何かしら外から観測可能なものではある可能性は高い)、それがprivateに閉じていていいものではないと言う気づきのきっかけになる。 と言うのは教科書的回答だけど、外には見せたくないけれど複雑なロジックを包含していて、入念かつ局所的にテストしたいと思うこともある。 この動機はすごく自然。きっとそこはテストしなかったらバグってるし。テストしてもバグが見つからないと言うのもよくあるんだけど。 この手のがどうあるのがいいのかはチーム体制も含めたプロダクトによると思っている。 綺麗な考え方は、独立したコンポーネントとして関心ごとや複雑性を閉じ込め、テストしたいと思った内容にもっと高い格を与える。「格」なんて表現は他で使ったこ

    privateメソッドをテストしたい - 日々常々
    tanimina
    tanimina 2021/03/31
    cf.「プライベートメソッドをテストすべきか」 https://anond.hatelabo.jp/20201220182440
  • 「参照透過である」とは、何から何への参照がどういう条件を満たすことを言うのか - Qiita

    関数型プログラミングが流行していることもあって、頻繁に耳にする「参照透過性」という用語について考えます。 ∥ 参照透過性 - Wikipedia その過程で目にした、Stack Overflow 上の Reddy 氏の発言が面白かったので、ザックリと訳します。 用語の起源と、それがプログラミング言語に導入された経緯 一応意味は分かってはいるんですが、なぜ「副作用のない関数呼び出し」やら「変数への再代入の禁止」といった特性を「参照透過性」と呼称するのかが分かりませんでした。この場合の「参照」は、何が何を参照することであり、また、それがどういう状態にあることを「透過である」としているのかが、通り一遍調べてみても分かりませんでしたので、掘りに行ってきます。 英語Wikipedia の方には、この考え方がプログラミングの概念として導入された経緯についての論文が参考文献として挙げられています。

    「参照透過である」とは、何から何への参照がどういう条件を満たすことを言うのか - Qiita
    tanimina
    tanimina 2015/10/19
    referential transparencyの訳は哲学では「指示的に透明」が使われているはず(『言語哲学大全III』など)
  • 「クロージャ」という言葉について

    http://b.hatena.ne.jp/entry/kenokabe-techwriting.blogspot.com/2015/04/blog-post_30.html http://kenokabe-techwriting.blogspot.jp/2015/04/amazon102-93.html この記事自体はどうでも良いのだけど、以前「クロージャ」という言葉の初期の使用例を探したことがあったのを思い出したので、参考までに。 Landin "A λ-Calculus Approach" (1966) We represent the value of a λ-expression by a bundle of information called a "clusure", comprising the λ-expression and the environment relati

    「クロージャ」という言葉について
    tanimina
    tanimina 2015/05/01
    cf.著書の「クロージャ」の説明が誤っているとの指摘が、誤っていることついて http://b.hatena.ne.jp/entry/kenokabe-techwriting.blogspot.com/2015/04/blog-post_30.html
  • 著書の「クロージャ」の説明が誤っているとの指摘が、誤っていることついて

    著書の「クロージャ」の説明が誤っているとの指摘が、誤っていることついて 2015年4月30日木曜日 著書、関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間 について、 「クロージャ」の説明が誤っています と、また☆1のレビューが投稿されていますが、誤っていることを説明します。 おそらく、これまでそれを眼にしたかなり多くの技術者が「ああ間違った指摘をしているレビューだ」と理解していることだと思いますが、おそらくこのレビューも単に、 「技術的反論は何一つ見受けられない」と宣言したことを「挑戦」と受け取り、 脊髄反射的に応じた、単なるネガティブキャンペーンが第一目的であり、 広い読者、技術者、学習者にむけて「正しい知識を共有すること」ではないのでしょうから、 このブログ記事の説明をもっても、今後そのまま誤ったまま放置され、訂正される、という良識は当

    tanimina
    tanimina 2015/05/01
    cf. 「クロージャ」という言葉について http://anond.hatelabo.jp/20150501033012
  • Gauche > Archives > 2014/09/10

  • Island Life - S式の読みやすさ

    About 南の島のプログラマ。 たまに役者。 Practical Schemeの主。 WiLiKi:Shiro 最近のエントリ 無限cxr高校受験Defense振り返ってみると2019年は色々学んで楽...覚えるより忘れる方が難しい(こともある)眼鏡のつると3DプリンタIris Klein Acting ClassSAG-AFTRA conservatory: Voice Acting創作活動って自分を晒け出さねばならないと...ループを使わずに1から100までMore... 最近のコメント shiro on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/14)1357 on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/01)ベアトリーチェ on ハイポハイポハイポのシューリンガン (2022/04/02)ベアトリーチ

    Island Life - S式の読みやすさ
  • Lispのカッコは怖くないよ - knjnameのブログ

    最近Lispの連れション仲間を増やしたいので、いろんな初見の人に「Lispって知ってる?」と質問して回っています。 そこそこアンテナのある技術者ならLispというのがプログラミング言語の一派を意味しており、それが主に大量のカッコで構成されていることは知っているようなのですが、なんか拒否反応が多いんですよね。 拒否反応というのが、まあ、だいたい 「カッコが多すぎて気がおかしくなる」 「私の人生は大量のカッコに対応するには短すぎる」 「大学でやったけどカッコ死ね。」 みたいなHTML初心者がタグのネストに敗北したみたいな感想ですね…。 まあ、パッと見てそういいたくなる気持ちは分かるんですが、それ自体がよくあるLispに対する誤解と言わざるを得ないです。 事実、Lispプログラミングは大量のカッコを相手にするのですが、誰もカッコの個数なんて見ていません。 Lispのプログラムの構造を読むときは、

    Lispのカッコは怖くないよ - knjnameのブログ
  • Lispの壁の高さ - 再帰の反復blog

    『文學界』10月号に載っている円城塔「プロローグ」第6回で少しだけLispやSchemeやGaucheについての話題になっていた。小説でGaucheへの言及があるのは他は木雅彦『くあっどぴゅあ』だけだろうか。 Lispの処理系を入れたが、対話環境を触っても釈然とせず、エディタとしてEmacsを使うことにして……みたいな流れ。 このあたりまででもう、LISPに興味を持ったかも知れない人の九割九分を振り落とすだろう壁の高さだ。 LispでもSchemeでも、処理系を起動したときの対話環境に、ほぼ何の入力支援機能も備わっていないのはなぜなのだろう。 rlwrap相当の入力支援がデフォルトで付いていても良いと思うのだけど、そうなっている様子は無いし(ひょっとすると知らないだけでそういう処理系もそれなりにあるのか?)、処理系の起動時のメッセージを見てもマニュアルを見ても、「素の状態での入力は大変で

    Lispの壁の高さ - 再帰の反復blog
    tanimina
    tanimina 2014/09/10
    cf http://chaton.practical-scheme.net/gauche/a/2014/09/10 >>えんどう # PLT Scheme改めRacketとかじゃだめなのかなあ>お試し用途<< からの会話
  • 新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡 - Qiita

    あわせて読みたい 新人プログラマに知ってもらいたいメソッドを読みやすく維持するいくつかの原則 ペアプログラミングして気がついた新人プログラマの成長を阻害する悪習 「オブジェクト指向プログラミング」と「関数型プログラミング」のたった一つのシンプルな違い あきらめるにはまだ早い!ソースコードの品質向上に効果的なアプローチ 2015年に備えて知っておきたいリアクティブアーキテクチャの潮流 この記事について この記事は新人向けの研修内容を再編集してお送りいたします。 ここで述べる内容はどのようにして現在のプログラミングスタイルが生まれてきたかを理解することで、よりよいプログラムを書くためのもので、正確なソフトウェア工学の歴史を学ぶためのものではありません。正確な歴史を把握したい場合は、原典をあたるようにしてください。 また、想定している読者は「よくあるオブジェクト指向プログラミングの学習」を既にし

    新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡 - Qiita
    tanimina
    tanimina 2014/05/14
    cf. オブジェクト指向の概念の発明者は誰ですか?http://d.hatena.ne.jp/sumim/20040525/p1 メッセージ送信と動的結合http://d.hatena.ne.jp/lemniscus/20091016/1255683342
  • 平方数かどうかを高速に判定する方法 - hnwの日記

    平方数とは、ある整数の平方(=二乗)であるような整数のことを言います。つまり、0,1,4,9,16,...が平方数ということになります。 ところで、与えられた整数が平方数かどうかを判定するにはどうすれば良いでしょうか。与えられた整数の平方根の小数点以下を切り捨て、それを二乗して元の数になるかどうか、というのがすぐ思いつく実装です。 <?php function is_square($n) { $sqrt = floor(sqrt($n)); return ($sqrt*$sqrt == $n); } しかし、平方根の計算は比較的重い処理です。もっと高速化する方法は無いのでしょうか。 多倍長整数演算ライブラリGNU MPには平方数かどうかを判定するmpz_perfect_square_p関数が存在します(PHPでもgmp_perfect_square関数として利用できます)。稿ではこの実装

    平方数かどうかを高速に判定する方法 - hnwの日記
    tanimina
    tanimina 2014/05/03
    平方数(完全平方)かどうかの判定が必要なアルゴリズムの実例 http://d.hatena.ne.jp/lemniscus/20130226/1361874593#squfof
  • どうぞ 関数型料理 http://blog.practical-scheme.net/shiro/20140129-functional-cooking プロ..

    どうぞ 関数型料理 http://blog.practical-scheme.net/shiro/20140129-functional-cookingプログラミング言語の基礎知識 http://d.hatena.ne.jp/lemniscus/20100701/1277990423関数型とオブジェクト指向という一見相反するプログラミングパラダイムの併用について理解した http://zerobase.hateblo.jp/entry/2013/02/21/171750

    どうぞ 関数型料理 http://blog.practical-scheme.net/shiro/20140129-functional-cooking プロ..
  • Scheme:非正確な整数

    Gauche:Bugsから移動 (floor 10.5) -> 10.0 (0.8.9) OsN (2007/03/15 01:43:38 PDT): 勘違いしているかもしれませんが、、、 gosh> (floor 10.5) 10.0 floor, ceiling, truncate, round は integer を返す、とドキュメントに ありますので、(floor 10.5) で 10 でなく、10.0 が返ってくるのが違和感あります。 Shiro(2007/03/15 02:28:08 PDT): 10.0はintegerですよ。非正確数ではありますが。 ちなみに正確数を渡せば正確なintegerが返ります。 gosh> (floor 21/2) 10 逆に、整数を要求する手続きに非正確な整数を渡せば非正確な結果が得られます: gosh> (gcd 60.0 24.0) 12.0

    Scheme:非正確な整数
  • ぼくのかんがえたさいきょうのround関数 - hnwの日記

    浮動小数点数の丸めにおいて丸め桁数を指定でき、それでいて精度を失わないようなround関数をCで実装してみました。 https://github.com/hnw/precise-round 実装としては、受け取った浮動小数点数から最短になる10進表記に変換し、浮動小数点をズラすことなく10進表記のまま四捨五入を行うものです。これを元に偶数丸めを実装するのも容易でしょう。 実際、前回記事「RubyPythonとC#のround関数のバグっぽい挙動について」で指摘した5.015の例についても期待通りに丸めることができます。 #include <stdio.h> extern double precise_round(double x, int digits); int main() { printf("%f\n", precise_round(5.015, 2)); // 5.02 prin

    ぼくのかんがえたさいきょうのround関数 - hnwの日記
    tanimina
    tanimina 2014/01/01
    cf.http://blog.practical-scheme.net/shiro/20131229-flonum-rounding 「double, int -> double であるような「10進n桁で丸める」関数を考えるのが間違いなのかもしれない」
  • 浮動小数点数の2進10進変換のこと - 再帰の反復blog

    浮動小数点数のわかりにくさの一因 浮動小数点数は難しいし何だか怪しげな感じがする。たぶん主な理由は 数値計算の難しさ 浮動小数点数演算の難しさ だと思う。でもこれらとは別に、 浮動小数点数を使う場合、ほぼ常に2進10進変換が介入している という理由があるような気がする。 浮動小数点数は2進小数×2のベキの形で表現されているけど、浮動小数点数を出力したり入力したりする場合は10進小数×10のベキの形で表記される。つまり 浮動小数点数演算のシステム自体(コンピュータ側の世界)は2進数だけで完結している。 逆に、浮動小数点数の表示・入力(人間側の世界)では通常、10進数だけで完結している。 この二つの世界を行き来する場合に2進10進変換がおこなわれる。 ということになる。さらにこれは、整数での2進10進変換とは全く違っている。整数の場合、2進と10進の間で変換しても表現が違うだけで全く同じ数を表

    浮動小数点数の2進10進変換のこと - 再帰の反復blog
  • Island Life - 2進小数の10進桁での丸め

    About 南の島のプログラマ。 たまに役者。 Practical Schemeの主。 WiLiKi:Shiro 最近のエントリ 無限cxr高校受験Defense振り返ってみると2019年は色々学んで楽...覚えるより忘れる方が難しい(こともある)眼鏡のつると3DプリンタIris Klein Acting ClassSAG-AFTRA conservatory: Voice Acting創作活動って自分を晒け出さねばならないと...ループを使わずに1から100までMore... 最近のコメント shiro on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/14)1357 on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/01)ベアトリーチェ on ハイポハイポハイポのシューリンガン (2022/04/02)ベアトリーチ

    Island Life - 2進小数の10進桁での丸め
  • オブジェクト指向の概念の発明者は誰ですか? - Smalltalkのtは小文字です

    忙しい人のためのまとめ 一般に「オブジェクト指向プログラミング」と呼ばれる考え方には発案者が異なる二系統がある。(ただし簡単のため、次のうち前者から批判的に派生して生じたプロトタイプベースのオブジェクト指向はここには含めていない) アラン・ケイによる、変化に強い長期運用可能な遅延結合システムを SIMULA67 にあった「オブジェクト」をメッセージの受け手とすることで実現(オブジェクトにメッセージ送信)するアイデアに基づく「メッセージングのオブジェクト指向」と、 ビアルネ・ストラウストラップ(前後して抽象データ型を発案したリスコフ人、オブジェクトクラスを考えたニガードらSIMULA陣営、Eiffelのメイヤーらも同様の着想を得ている)による、ユーザー定義型(抽象データ型)を SIMULA67 にあった「クラス」という言語機能を使って実現(カプセル化、継承、多態性)するアイデアに基づく「抽

    オブジェクト指向の概念の発明者は誰ですか? - Smalltalkのtは小文字です
  • “オブジェクト指向”の本質 - Smalltalkのtは小文字です

    「OO(OOP)とは何か?」については、ネタが割れてしまえばそんなに複雑なものではない…と個人的には最近、考えるようになってきています。 リスコフのユーザー定義型(aka、抽象データ型。データと手続きのセット)そのもの、あるいはその「ユーザー定義型」をクラスやそれに準ずる機能で実現しようとするOO(ストラウストラップ。aka、クラス指向。継承を使ったプログラミング)。もしくはそれらを一般化したOO(クック。aka、手続きによる抽象化)。 メッセージングにより動的性を実現しようとするOO(ケイ。aka メッセージ指向) 今回登場した、後者のメッセージングのOOのミニマリズムをおしすすめることによって派生的に生じたOO(アンガーとスミスからの 派生 変形。aka、プロトタイプベースOO。フレームとスロット、あとは委譲機構があれば十分…というミニマル化の結果、アンガーとスミスの頃には重要だった“

    “オブジェクト指向”の本質 - Smalltalkのtは小文字です
  • オブジェクト指向言語として必須な要素とは何か? - Smalltalkのtは小文字です

    ときどきの雑記帖 リターンズ -おしえて(OOPLの)えらいひと より。お呼びでない…とは思いましたが、私のこれまで調べたことを頭の中で整理するのに役立ちそうなので、できるだけ簡潔にまとめてみます。 ケイのオブジェクト指向(メッセージングのオブジェクト指向)に立脚する場合 このオブジェクト指向のコンセプト パーソナルコンピューティングに係わるものをメッセージングで表現。 それをサポートする言語に必須のもの メッセージング(あるいは、それに準ずる)機構と、メッセージのレシーバ(たいていは、オブジェクト。状態や処理の保持・保護・隠蔽を行なえることが期待される)。 原則として欠いてはいけない機能 可能な限りの動的性。 ストラウストラップのオブジェクト指向(ユーザー定義型のオブジェクト指向)に立脚する場合 このオブジェクト指向のコンセプト 抽象データ型(この文脈ではユーザー定義型を指す)を「クラス

    オブジェクト指向言語として必須な要素とは何か? - Smalltalkのtは小文字です
  • スライド「再帰プログラムの幾何」

    Geometry of Recursive Programs 2006 9 15 I. 2 • • • • • 3 — • • • 4 5 6 recursion I II III IV 7 II. 8 fact(x) ≡ if x = 0 then 1 else x × fact(x−1) F F(f)(x) ≡ if x = 0 then 1 else x × f(x−1) fact = F(fact) 9 fact(4) (fact = F(fact)) = F(fact)(4) (F ) = if 4 = 0 then 1 else 4 × fact(4−1) (4 �= 0) = 4 × fact(3) (fact = F(fact)) = 4 × F(fact)(3) (F ) = 4 × (if 3 = 0 then 1 else 3 × fact(3−1)) (3 �= 0