プログラミング
雑誌「日経Linux」、正月に本屋で見かけた時に「まるで最終号みたいなもの言いだな」と思ったんだけど、本当に最終号だったのか(「2024年1月号をもって休刊」とのこと)。 日経Linux(リナックス) 2024年1月号 [雑誌] 日経BP Amazon 正直、「日経Linux」も…
Haskellで「小数点以下、四捨五入」をしたくて標準ライブラリPreludeに含まれている「round」関数を使ってみたところ、どうも結果がおかしい。調べてみると、どうやら「round」は「銀行型丸め」(小数部分が「0.5」ピッタリの場合、偶数に丸める)を行う関数…
Haskell修行のために、Paizaの「スキルチェック」問題やAizu Online Judgeの「コース」問題に取り組んでいて、またしても妙なところでハマってしまった。特定のテストケースでだけ不正解が出てしまうのだ。 コードの修正を数時間繰り返してみたがどうしても…
先日、Haskellのリストを処理する関数で、2つのリストの直積(direct product)を返す関数を探していて、僕は見つけられなかった。仕方ないのでリスト内包表記で書いた。 [(x, y) | x <- [0,1], y <- ['a','b']]--[(0,'a'),(0,'b'),(1,'a'),(1,'b')] 先日、…
Haskellの勉強を始めて約1か月が過ぎたのだが…、学習がなかなか捗らない。関数型プログラミング言語に関して全くの初学者を対象としたHaskell入門書を2冊購入したのだが、どちらも25〜45%読んだところでストップしてしまっている。その内の1冊なんかは200ペ…
Haskellの修行のツモリで、Paizaのスキルチェックの過去問題(一番易しいDランク問題)やAtcoder Beginner Contestの過去問題(やはり一番易しいA問題)を解いていた。そしたら、ものの見事にハマった~(涙)。 やりたいことは簡単だったのだ。a、b、x、yと…
・リスト内包表記 プログラミング言語のPythonを学ぶ途中で僕が大いに戸惑ったのが、「リスト内包表記」だ(「セット内包表記」というヤツもある)。まぁ、「リスト」や「セット(集合)」を記述する際の単なる「表記法」に過ぎないと言えば過ぎないし、確か…
・9日目のFizzBuzz main = loop [1..100]loop [] = return ()loop (n:ns) = do putStrLn(fizzBuzz n) loop(ns)fizzBuzz n | n `mod` 15 == 0 = "FizzBuzz" | n `mod` 5 == 0 = "Buzz" | n `mod` 3 == 0 = "Fizz" | otherwise = show n 「1日目のFizzBuzz」(…
・8日目のFizzBuzz main = mapM_ putStrLn (take 100 fizzBuzz)fizzBuzz = map fizzBuzzString [1..]fizzBuzzString x | x `mod` 15 == 0 = "FizzBuzz" | x `mod` 5 == 0 = "Buzz" | x `mod` 3 == 0 = "Fizz" | otherwise = show x 「HaskellらしいFizzBuzz…
・7日目のFizzBuzz main = sequence_ [putStrLn $ fizzBuzz n | n <- [1..100]]fizzBuzz x | x `mod` 15 == 0 = "FizzBuzz" | x `mod` 5 == 0 = "Buzz" | x `mod` 3 == 0 = "Fizz" | otherwise = show x 「アクション」(「IOモナド」?)そのものをリストに…
・6日目のFizzBuzz main = loop 1 100loop n limit | n > limit = return () | otherwise = do putStrLn(fizzBuzz n) loop (n + 1) limitfizzBuzz x | x `mod` 15 == 0 = "FizzBuzz" | x `mod` 5 == 0 = "Buzz" | x `mod` 3 == 0 = "Fizz" | otherwise = sho…
新年明けて、「何か新しいことを始めてみたい!」と思い、前から学んでみたかった関数型プログラミング言語Haskellの学習を始めた。 Haskellの名を初めて知ったのは15年くらい前かなぁ…? 10年くらい前の「関数型言語ブーム」の頃から興味はあったのだが…、H…
プログラミング言語によって、整数同士の除算(割り算)の「余り」の演算結果が異なることには、数年前に気付いていた。主に、コンパイラ形式のC言語系か、インタプリタ形式のスクリプト言語系かで、全く異なるのだ。 例えば、C言語とGo言語で、 +1 % +3-1 %…
ITエンジニアのための転職・就職支援サービスである「paiza」が提供している、プログラミング教育コンテンツ「paizaラーニング」中の「レベルアップ問題集」に「トポロジカルソートメニュー」が追加された。 「トポロジカルソート」…、そんなソート聞いたこ…
ITエンジニアのための転職・就職支援サービスである「paiza」が提供している、プログラミング教育コンテンツ「paizaラーニング」中の「レベルアップ問題集」に「Union-find・クラスカル法メニュー」というのがある。 「クラスカル法」というのは、グラフ・ネ…
Rubyでプログラムを書いていて、妙なところでハマってしまった(涙)。 if p true end みたいにifの条件を書いていないのに、「エラーにならず」に true と出力されるのだ。 もっと驚いたのは、 if p true elsif p false end と書いたら、 true false と出力…
Lispの本を読んでいてLispというものがだんだんわかってくると、「Lispを学ぶとプログラミングのスジが良くなる」みたいな言説は嘘ではないかと思うようになってきた。 Lispの魅力は、おそらくLispそのものを自分で拡張してしまえるような柔軟さにある(条件…
いつも文句言ってるクセにナンダカンダで毎月買っている「日経ソフトウエア」の最新号(2010年9月号)の特別付録が「完全保存版! コードでわかるJava & オブジェクト指向」で、一気に読んでみた。 Javaに関しては、もう10年くらい前から数年おきにチャレン…
僕は長い間「再帰的関数」の面白さがわからなかったのだけど、ようやくわかった。その面白さ(と怖ろしさ)は「多重ループの深さが実行時に(データの階層構造に合わせて)自動的に決まる」ことにある! だから、「(単なる1次元の、つまり1重の)ループ処理…
数ヶ月前(?)に本屋で見かけて「そのうち読んでみたいな」と思っていた『初めての人のためのLISP(増補改訂版)』(竹内郁雄(著) 2010年 翔泳社)が図書館に入っていたので借りてきて読み始めた。確かに「天下の奇書」の評判通りムチャクチャな本で大変…
最近、Gauche(LISPの2大方言の1つSchemeの処理系。もう1つはCommon LISP)やLISPの本なんかをチラチラ眺めていて、関数型言語の魅力というものが少しずつわかってきた。 まず最初に、 ルールが少ない。 ということ。瑣末な例かもしれないが、予約語1つとっ…
Visual Studioのスタートページに表示されるMSDNの記事一覧をときどき眺め読んでみるのだが、今日読んだ「関数型プログラミングの .NET 開発者向け概要」はなかなか面白かった。 記事はVisual Studioに新たに追加された関数型言語F#の初歩を扱った記事で、そ…
Visual Basic 2008 Express Editionを使ってプログラミングしていて、些細なところで落とし穴にハマッた。CInt()の「銀行型丸め」というヤツだ(おそらくVisual Basic 2008だけでなく、Visual Studio 2008、Visual Studio 2010の他の言語(C++、C#、F#、J++…
月刊誌「日経ソフトウエア」で2009年7月号〜2010年6月号の1年間に渡り、関数型言語Gaucheの記事が連載されていた(kikaineko氏による「魔法の言葉 関数型言語を学ぼう」)。 Gaucheは日本人ハッカー川合史朗氏の手によるScheme処理系で、SchemeはLisp方言の1…
3月末に10日間ブッ続けで勉強会を行う「狂気のVB合宿」に参加してプログラミング学習熱に火がついてしまい、ここ1週間ほどC/C++入門をパラパラ眺めていた。 実は僕は、C入門なら過去に何度も読んだことがあるが、C++入門はほとんど読んだことがない(しかも…
下らないコンプレックスというものは誰にでもあるもので、僕にもそんなコンプレックスがいくつかある(猫舌だとか)。ただ、そういうコンプレックスを克服できたり多少軽くすることができると、意外と自分自身に対する自信(と言うか「僕、大丈夫」感)が強…
昨年秋にC#の勉強を始めて、案外抵抗なく新しい言語をスンナリ受け容れられた自分が不思議だった。オブジェクト指向プログラミング言語にはかなりの苦手意識があったからだ。 最近C言語とJavaの入門書(『Cの絵本』(アンク 2002年 翔泳社)と『Javaの絵本(…
多くのプログラマを魅了するらしいのだが、僕自身は全く魅了されなかったプログラミングテクニックの1つに、「関数の再帰呼び出し」というものがある。関数の処理内容として自分自身を呼び出す、というテクニックを言う。 僕自身がこのテクニックにハマらな…
先日書いた「多重ループ」の話、僕が何を面白がっているかと言うと、たぶん、掛け算感覚と足し算感覚の接点のように感じたからだろう。 僕はプログラム的に「行ったり来たり」を実現したかった。このとき僕が感じていたのは、「1足す、1引く」という加法・減…
半年振りにC#でプログラミングしていて、我ながらギョッとするコードを書いてしまった。 これは架空の例だが、今、5枚の絵を表示する絵本プログラムをつくっているとして、5枚の絵はそれぞれ全然違う形式なので同一の関数を使えないものとする。それで僕は、…