「プログラミングClojure」を読んであらためてCommon Lispの素晴らしさがわかったような気がします
Clojureの本なんですけどこの本に書いてあることはCommon Lispで全てできる
Common Lispのパワーを改めて感じられました
やっぱりCommon Lispすげーや
Clojureって言っても、Common Lispのマクロ拡張セットじゃないかなと
LET OVER LAMBDA
この本は何回読んでも難しい
全然理解できない
意味わかんないと言うか頭がついていかない
実際コード入力してやってみても意味わかんないし
とにかく難しい
前回読んだときより多少理解できるようになってきてるのでまた一年後くらいに読むことになるのだけどその時はもう少しわかるようになっているかな
「すごいHaskellたのしく学ぼう!」
Haskellの本は4冊目くらいかな
一向にできるようにならないですね
関数のCase、ガード、whereが上手く使いこなせない気がします
このあたりは練習あるのみではないかなと
「ドメイン特化言語」
マーチン・ファウラー著の本が近所の普通の本屋で売ってたので思わず買ってしまった
なんでこんな本仕入れたのかまったく理解できないですね
今日買いました
コンピュータサイエンスの話題、Common Lisp、すこしHaskellにも触れます 求職中 スキルとしてはVisual StudioでC#が得意 Webアプリケーション、データベースの一般的な操作に精通しています 要件定義から設計、実装まで問題なくこなせます 一般的なプログラミング言語なら問題なく扱えます
2012年6月2日
2012年4月30日
コンピュータの構成と設計
通称「パタヘネ」を読んでいます
内容の半分くらいは大学で習ったことで、あとの半分は薄々知ってはいたけど本当はどうなっているか想像でしか知らなかったことですね
内容は低レベルな話でプログラム格納方式のコンピュータがどうやって計算を行っているかの話
MIPSの命令セットを例としてC言語のプログラムがどうやってマシン語になるかとか、コンパイルする際の最適化についても記述されています
今の時代(2012年)はもうこんな最適化はやらないけど知識として知っているといいプログラムが書けるようになると思います
スタックの説明、リンカの説明がもう少し詳しくてもいいかなと思いました
まあそれにしてもこの本に載っているようなことを誰かが考えてくれたおかげでコンピュータが簡単に利用できるようになってるってことに感謝ですよね
内容の半分くらいは大学で習ったことで、あとの半分は薄々知ってはいたけど本当はどうなっているか想像でしか知らなかったことですね
内容は低レベルな話でプログラム格納方式のコンピュータがどうやって計算を行っているかの話
MIPSの命令セットを例としてC言語のプログラムがどうやってマシン語になるかとか、コンパイルする際の最適化についても記述されています
今の時代(2012年)はもうこんな最適化はやらないけど知識として知っているといいプログラムが書けるようになると思います
スタックの説明、リンカの説明がもう少し詳しくてもいいかなと思いました
まあそれにしてもこの本に載っているようなことを誰かが考えてくれたおかげでコンピュータが簡単に利用できるようになってるってことに感謝ですよね
2012年4月26日
驚きの連続
驚きと言うかここまでくると逆に呆れてしまうほどにマクロはスゴイ
すがすがしいですね
なんか手品でも見ているよう
コードの魔術師って感じですね
やってることって全然簡単というか初歩も初歩関数呼び出すだけだったり制御構造の条件分岐だったりするだけなのにこの力の差を見せつけられた感じはなんなんだろうか
プログラミング言語は最初にCommon Lisp習うのがいいんじゃないのかな?
C言語習うより身になるんじゃないのかなと思う
Common Lisp習いたかったよ
FortranやBasicなんかやってる場合じゃないよね
すがすがしいですね
なんか手品でも見ているよう
コードの魔術師って感じですね
やってることって全然簡単というか初歩も初歩関数呼び出すだけだったり制御構造の条件分岐だったりするだけなのにこの力の差を見せつけられた感じはなんなんだろうか
プログラミング言語は最初にCommon Lisp習うのがいいんじゃないのかな?
C言語習うより身になるんじゃないのかなと思う
Common Lisp習いたかったよ
FortranやBasicなんかやってる場合じゃないよね
2012年4月25日
マクロは
On Lispを読んでいるんですけど、この本に載っているマクロはどれも短いものばかりで単純なプログラムとしてみるだけだとなんてことないような気がするのだけどやっぱり難しい。
コンパイル時に置き換えられた後の形を思い浮かべてさらに実行時にどうやって実行されるか考えないといけないので負担が多すぎる。
慣れてくると、一歩すすむと、このコンパイル時と実行時の挙動の理解があっさりできるようになるのだろうか?
ポールグレハム級になってくるとマクロも空気のような存在になっているのか不思議でしょうがない。
でも普通の人、プログラムとか全然やったこと無い人にとっては普通のプログラムでも理解するのが難儀なので俺もそのうちマクロが難なく理解できるようになる日がやってくるのだろうか。
マクロをいちいち理解しようとすると全然読み進まないです。
On Lispに載っている例はマクロじゃなければ、全てのプログラムはすごく簡単なものばかりなのだけどマクロになると途端に抽象度が上がって難易度がグンと跳ね上がるな。
「マクロを定義するマクロ」なんて正直、もうついていけないのだけど。
落ち着いて一つ一つ分解していけばなんとかなるけどメチャクチャ時間がかかるのだよね。
難しい。
コンパイル時に置き換えられた後の形を思い浮かべてさらに実行時にどうやって実行されるか考えないといけないので負担が多すぎる。
慣れてくると、一歩すすむと、このコンパイル時と実行時の挙動の理解があっさりできるようになるのだろうか?
ポールグレハム級になってくるとマクロも空気のような存在になっているのか不思議でしょうがない。
でも普通の人、プログラムとか全然やったこと無い人にとっては普通のプログラムでも理解するのが難儀なので俺もそのうちマクロが難なく理解できるようになる日がやってくるのだろうか。
マクロをいちいち理解しようとすると全然読み進まないです。
On Lispに載っている例はマクロじゃなければ、全てのプログラムはすごく簡単なものばかりなのだけどマクロになると途端に抽象度が上がって難易度がグンと跳ね上がるな。
「マクロを定義するマクロ」なんて正直、もうついていけないのだけど。
落ち着いて一つ一つ分解していけばなんとかなるけどメチャクチャ時間がかかるのだよね。
難しい。
2012年3月30日
夢か
漠然とだけど、好きなプログラミング言語使って好きなように自由にプログラムが作ることかな
GUIで無い、サーバーで動くようなものやライブラリなんか作りたいね
SQLを使わなくてもよくて、別にRDBとかとやり取りをしないものとかいいね
RDBとかSQLにはなんか嫌われてる気がするから
やっぱりGUIでもいいや、GUI楽しいもんね
なんか便利なライブラリとかあるんだったらGUIでもいいね
.NET Frameworkだとライブラリとしては少し物足りないけど
WPFとかどうなんだろうか、まあいいや
誰にでも動かせるように実行環境に制限があるようなものじゃなくてこっちで環境を指定できるようなものとかいいね
PHPしか動かないからPHPで作るとか最悪、吐き気モヨオス、ゲロゲロ
そうなるとJavaScriptで全部ダウンロードしてもらうことになるとできそうだな
一番現実味がありそうだな
だけどなるべくなら静的に型付けされている言語の方がいいような気がするんだけど
今まで動的型付けの言語で本格的に開発したことないから良く分からないんだよね
他には要求とかイチイチ考えなくてもいい、これ作れって指示されてそれを作るだけ
黙々とプログラム書くだけ
要求仕様を考えなくてよくてプログラムのことだけ考えればいい
どんなもん作るかは勝手に考えてくれてその機能を実現するだけ
使い方を俺に決めさせたら俺が一番使いやすい物になるに決まってるじゃんか
少し具体的に言うとHaskellでなにか作るってのが理想に近いんじゃないかなと思う
本当はCommon Lisp使いたいのだけど少し不安
Common Lispはとても魅力的だけど理想状態を考えるとHaskellの方が理想に近そう
あるいはErlangでもいいかな
なんか面白そうなプログラミング言語使って好きなようにプログラムできるんだったらなんか良さそうだなと思う
それが具体的になんなのかさっぱり分からないけど
エディタなんかもいいかもね
でもエディタだったらVimがあるからな
なんか楽しそうな案件ないかな
GUIで無い、サーバーで動くようなものやライブラリなんか作りたいね
SQLを使わなくてもよくて、別にRDBとかとやり取りをしないものとかいいね
RDBとかSQLにはなんか嫌われてる気がするから
やっぱりGUIでもいいや、GUI楽しいもんね
なんか便利なライブラリとかあるんだったらGUIでもいいね
.NET Frameworkだとライブラリとしては少し物足りないけど
WPFとかどうなんだろうか、まあいいや
誰にでも動かせるように実行環境に制限があるようなものじゃなくてこっちで環境を指定できるようなものとかいいね
PHPしか動かないからPHPで作るとか最悪、吐き気モヨオス、ゲロゲロ
そうなるとJavaScriptで全部ダウンロードしてもらうことになるとできそうだな
一番現実味がありそうだな
だけどなるべくなら静的に型付けされている言語の方がいいような気がするんだけど
今まで動的型付けの言語で本格的に開発したことないから良く分からないんだよね
他には要求とかイチイチ考えなくてもいい、これ作れって指示されてそれを作るだけ
黙々とプログラム書くだけ
要求仕様を考えなくてよくてプログラムのことだけ考えればいい
どんなもん作るかは勝手に考えてくれてその機能を実現するだけ
使い方を俺に決めさせたら俺が一番使いやすい物になるに決まってるじゃんか
少し具体的に言うとHaskellでなにか作るってのが理想に近いんじゃないかなと思う
本当はCommon Lisp使いたいのだけど少し不安
Common Lispはとても魅力的だけど理想状態を考えるとHaskellの方が理想に近そう
あるいはErlangでもいいかな
なんか面白そうなプログラミング言語使って好きなようにプログラムできるんだったらなんか良さそうだなと思う
それが具体的になんなのかさっぱり分からないけど
エディタなんかもいいかもね
でもエディタだったらVimがあるからな
なんか楽しそうな案件ないかな
2012年3月26日
Google Code Jam練習問題
2011の予選問題に挑戦
Problem C.
相変わらず問題の意味は良く分からないですがとりあえずxorすればいいのかなってことで解きました
xorでまとめただけです
Problem C.
相変わらず問題の意味は良く分からないですがとりあえずxorすればいいのかなってことで解きました
xorでまとめただけです
(defun compute (lst)
(if (zerop (reduce #'logxor lst))
(reduce #'+ (cdr (sort lst #'<)))
"NO"))
(dotimes (i (read))
(let ((r nil))
(dotimes (j (read))
(setf r (cons (read) r)))
(format t "Case #~A: ~A~%" (1+ i) (compute (nreverse r)))))
2012年3月22日
Google Code Jam練習問題
Google Code Jam 2012のエントリー受付中なので早速登録しました
Lisper目指してますので回答はCommon Lispで挑戦していきます
事前準備と言うことで練習問題に挑戦しました
2011の予選問題に挑戦
Problem A.
は問題のまま素直にプログラム組むとターンで繰り返すようになりますが、そうすると遅そうなので距離をまとめて引き算して次のスイッチの距離までを一気に計算するようにしました
BなのかOなのかの判断がイマイチ野暮ったい回りくどい記述になっているなと思います
この辺りをなんとかするともう少しスッキリしたものになるんじゃないかなと
Problem B.
は問題の意味が分からない
英語が辛いです
Lisper目指してますので回答はCommon Lispで挑戦していきます
事前準備と言うことで練習問題に挑戦しました
2011の予選問題に挑戦
Problem A.
は問題のまま素直にプログラム組むとターンで繰り返すようになりますが、そうすると遅そうなので距離をまとめて引き算して次のスイッチの距離までを一気に計算するようにしました
BなのかOなのかの判断がイマイチ野暮ったい回りくどい記述になっているなと思います
この辺りをなんとかするともう少しスッキリしたものになるんじゃないかなと
(defun operate (input)
(labels ((getrobot (lst) (car (car lst)))
(getdistance (lst) (cdr (car lst)))
(getnextpos (robot lst) (if (assoc robot lst) (cdr (assoc robot lst)) 0))
(getdiff (pos lst) (abs (- pos (getdistance lst))))
(getpos (pos target dist)
(cond ((< pos target) (if (< (+ pos dist) target) (+ pos dist) target))
(t (if (< (- pos dist) target) target (- pos dist)))))
(rec (lst bpos opos turn)
(cond ((null (cdr lst))
(if (eq 'b (getrobot lst))
(+ turn (getdiff bpos lst))
(+ turn (getdiff opos lst))
))
((eq 'b (getrobot lst))
(let ((diff (getdiff bpos lst)))
(rec (cdr lst) (getdistance lst) (getpos opos (getnextpos 'o lst) (1+ diff)) (1+ (+ turn diff)))))
(t
(let ((diff (getdiff opos lst)))
(rec (cdr lst) (getpos bpos (getnextpos 'b lst) (1+ diff)) (getdistance lst) (1+ (+ turn diff)))))
)
)
)
(rec input 1 1 1)
)
)
(dotimes (i (read) i)
(let ((r nil))
(dotimes (j (read) j)
(setf r (cons (cons (read) (read)) r)))
(format t "Case #~A: ~A~%" (1+ i) (operate (nreverse r)))))
Problem B.
は問題の意味が分からない
英語が辛いです
2012年1月17日
ストラウストラップのプログラミング入門を読み終えて
すごく時間かけて全部読みきったのですけど感想について
すごく細かく丁寧に書かれている本
心構えや姿勢みたいなものまで触れている
内容は本当に入門だから、これを読み終えても他にもいろいろ勉強しないとプログラム書けるようにはならない
この本は本当に入門に適しているかと問われると疑問が残ると思います
覚悟ができていないとこれだけの量を読むことは難しいと思うからです
覚悟ができている人には適しているでしょうね
だけどこの本を読んでもC++の良さについてはあまり学べないような気がしますが、それはやっぱり他の言語を使ってみて分かることだと思うので
メタプログラミングの説明が無いですね
無くて正解だと思いますけどね
テンプレートの説明のついでにメタプログラミングについてさらっと触れられているのかと思ったけどそんなことなかったなあ
一番面白かったところは言語の紹介の22章かな
だったら別にC++の本じゃなくてもいいじゃないかって感じですね
すごく細かく丁寧に書かれている本
心構えや姿勢みたいなものまで触れている
内容は本当に入門だから、これを読み終えても他にもいろいろ勉強しないとプログラム書けるようにはならない
この本は本当に入門に適しているかと問われると疑問が残ると思います
覚悟ができていないとこれだけの量を読むことは難しいと思うからです
覚悟ができている人には適しているでしょうね
だけどこの本を読んでもC++の良さについてはあまり学べないような気がしますが、それはやっぱり他の言語を使ってみて分かることだと思うので
メタプログラミングの説明が無いですね
無くて正解だと思いますけどね
テンプレートの説明のついでにメタプログラミングについてさらっと触れられているのかと思ったけどそんなことなかったなあ
一番面白かったところは言語の紹介の22章かな
だったら別にC++の本じゃなくてもいいじゃないかって感じですね
2012年1月3日
2012年1月2日
25章
組み込みシステムプログラミグについて
オープンな環境ではなくて特殊だったり閉じた世界でのプログラミングについての注意点
例えばヒープが利用できない環境でvectorを利用したい場合どうするか
ものすごく低レベルなプログラムについて
ビット演算などとコーディング標準について
オープンな環境ではなくて特殊だったり閉じた世界でのプログラミングについての注意点
例えばヒープが利用できない環境でvectorを利用したい場合どうするか
ものすごく低レベルなプログラムについて
ビット演算などとコーディング標準について
2012年1月1日
24章
数値の桁数、オーバーフロー、アンダーフロー、切捨てなど
コンピュータが扱う整数と実数の間での差について
記憶領域のサイズや誤差について
行列計算を連立一次方程式と解きながら実践する
あと乱数や三角関数などの一般的な数学関数について
コンピュータが扱う整数と実数の間での差について
記憶領域のサイズや誤差について
行列計算を連立一次方程式と解きながら実践する
あと乱数や三角関数などの一般的な数学関数について
23章
テキスト操作について
C++にはstringが用意されているのでテキストは比較的容易に扱えるようになっています
その説明と正規表現について
テキスト処理と言えば正規表現なのですがC++の入門書で正規表現について記述があるものは珍しいと思うのですが知っていると非常に有利だと思うのでC++の範囲から外にでるけどきちんと習得しておくことをオススメします
C++にはstringが用意されているのでテキストは比較的容易に扱えるようになっています
その説明と正規表現について
テキスト処理と言えば正規表現なのですがC++の入門書で正規表現について記述があるものは珍しいと思うのですが知っていると非常に有利だと思うのでC++の範囲から外にでるけどきちんと習得しておくことをオススメします
22章
歴史ですね
黎明期に利用された、あるいは現在のプログラミング言語に影響を与えたようなプログラミング言語についての解説
C++が入っているのが笑える
この本がC++なんだから入れなくてもいいような気がするんだけど
この章は一般教養のようなものでしょうね
黎明期に利用された、あるいは現在のプログラミング言語に影響を与えたようなプログラミング言語についての解説
C++が入っているのが笑える
この本がC++なんだから入れなくてもいいような気がするんだけど
この章は一般教養のようなものでしょうね
2011年12月31日
HP 35s
Common Lisp脳を鍛えるために役立つかどうか半信半疑ですが、逆ポーランド電卓買いました
HP 35s
後置演算対応の電卓です
Common Lispは前置だから完全に一致しているわけではないのですが、中置よりは全然力になるかなと思いました
と、言うのは購入に対する言い訳で、昔会社の人と休みの日にサッカーしてた時期がありましてですね、せっかくなんでサッカー好きな友達を誘って一緒にやろうぜって誘ったんですけどその友達は確か結局1回か2回しかサッカーしなかったんですよね
結局スパイクが欲しくて、当時ベッカム全盛期だったのですけどその友達はベッカムモデルのアディダスのスパイクが欲しかった
ただサッカーしないのにスパイクだけ買うってのがどうもなっとくいかなかったみたいでそこで俺がサッカー誘ったからこりゃ絶好の機会だねってことで早速スパイク買ってましたよ
サッカーするんだからスパイクなかったら話にならないってことでスパイク買ってた
HPの逆ポーランド電卓かったのも完全に欲しかったからなだけで、Common Lisp脳を鍛えるなんてのは購入に対する言い訳でしかないのですけどね
HP 35s
後置演算対応の電卓です
Common Lispは前置だから完全に一致しているわけではないのですが、中置よりは全然力になるかなと思いました
と、言うのは購入に対する言い訳で、昔会社の人と休みの日にサッカーしてた時期がありましてですね、せっかくなんでサッカー好きな友達を誘って一緒にやろうぜって誘ったんですけどその友達は確か結局1回か2回しかサッカーしなかったんですよね
結局スパイクが欲しくて、当時ベッカム全盛期だったのですけどその友達はベッカムモデルのアディダスのスパイクが欲しかった
ただサッカーしないのにスパイクだけ買うってのがどうもなっとくいかなかったみたいでそこで俺がサッカー誘ったからこりゃ絶好の機会だねってことで早速スパイク買ってましたよ
サッカーするんだからスパイクなかったら話にならないってことでスパイク買ってた
HPの逆ポーランド電卓かったのも完全に欲しかったからなだけで、Common Lisp脳を鍛えるなんてのは購入に対する言い訳でしかないのですけどね
2011年12月30日
21章
STLアルゴリズムについて
と言っても一般的なアルゴリズムの解説ではなくてコンテナやイテレータを利用してSTLでどうやって汎用性のあるアルゴリズムを提供しているかについて
また、STLアルゴリズムの利用方法について
コンテナを選ぶときの基準
STLって不慣れな人にはすごく利用しづらいものだと思うので、例えばテンプレートとか引数とか一目見ただけだとなんのことなのか良く分からないと思うのでそれらの解説
アルゴリズムを利用する際の要になる関数オブジェクトについての説明、使い方
昔、関数オブジェクト全然理解できなかったのだよねってことを思い出しながら読みました
コンテナ、イテレータ、アルゴリズムが独立しているこのSTLの概念に触れるたびにすごいなと関心しっぱなしです、本当にスゴイと思う
と言っても一般的なアルゴリズムの解説ではなくてコンテナやイテレータを利用してSTLでどうやって汎用性のあるアルゴリズムを提供しているかについて
また、STLアルゴリズムの利用方法について
コンテナを選ぶときの基準
STLって不慣れな人にはすごく利用しづらいものだと思うので、例えばテンプレートとか引数とか一目見ただけだとなんのことなのか良く分からないと思うのでそれらの解説
アルゴリズムを利用する際の要になる関数オブジェクトについての説明、使い方
昔、関数オブジェクト全然理解できなかったのだよねってことを思い出しながら読みました
コンテナ、イテレータ、アルゴリズムが独立しているこのSTLの概念に触れるたびにすごいなと関心しっぱなしです、本当にスゴイと思う
20章
コンテナとイテレータについてとそれぞれの内部のカラクリに関して
それぞれがどうなっているか、どういった機能が必要でそれを実現する方法について
色々なコンテナ、イテレータを区別しないで利用できる利点、必要性に関して
それぞれがどうなっているか、どういった機能が必要でそれを実現する方法について
色々なコンテナ、イテレータを区別しないで利用できる利点、必要性に関して
2011年12月24日
19章
やっとテンプレートの説明登場。
待ってましたと言った感じです。
アロケータとかでてきましたね。
なんか一気にレベルが上がった気がするのですが。
テンプレートの登場で一気に抽象度が上がったように感じるな。
面白くなってきましたね。
アロケーターについて説明があってやっと意味が分かった。
意味と言うか存在理由というか、なんのためにこれがあるのか不思議だったので。
待ってましたと言った感じです。
アロケータとかでてきましたね。
なんか一気にレベルが上がった気がするのですが。
テンプレートの登場で一気に抽象度が上がったように感じるな。
面白くなってきましたね。
アロケーターについて説明があってやっと意味が分かった。
意味と言うか存在理由というか、なんのためにこれがあるのか不思議だったので。
18章
コンストラクタについて。
コピーコンストラクタ、代入の意味や扱い方について。
浅いコピー、深いコピー。
浅いコピー、深いコピーについはクラスを扱う上では絶対必要になる。
クラスにどんなコンストラクタ、デストラクタが必要かのヒント。
あとは構文の見た目が自然になるように演算子オーバーロードについて。
配列についての考察とポインタとの関連。
値渡し、参照渡し、ポインタ渡しについて。
ポインタの問題点、注意点が詳しく記述されているので特に注意しておくといいと思う。
コピーコンストラクタ、代入の意味や扱い方について。
浅いコピー、深いコピー。
浅いコピー、深いコピーについはクラスを扱う上では絶対必要になる。
クラスにどんなコンストラクタ、デストラクタが必要かのヒント。
あとは構文の見た目が自然になるように演算子オーバーロードについて。
配列についての考察とポインタとの関連。
値渡し、参照渡し、ポインタ渡しについて。
ポインタの問題点、注意点が詳しく記述されているので特に注意しておくといいと思う。
17章
vectorを作りつつ色々学ぼうということ。
vectorと配列の違いやポインタについて。
アドレスとかデリファレンスの説明やなんでそんなもんがあるのかなど。
この説明がやっと登場するあたりさすがC++って感じですね。
このポインタやアドレスの説明読むとまあしょうがないそりゃそうだと思えるのだけど世間でよく言うように普通に挫折してそしてPHPやらなんやらで満足することになるのだろうな。
確かに初学者がこれ読んで「なるほど面白い」と思えるかと言うと素直にそうは思えないですがこれは非常に重要なことなので是非この難関を突破して欲しいところですね。
そしてクラスの説明もやっと登場。
とてもとても初歩的なクラスの説明だけど基本は大事だからしっかり身につけたいところ。
vectorと配列の違いやポインタについて。
アドレスとかデリファレンスの説明やなんでそんなもんがあるのかなど。
この説明がやっと登場するあたりさすがC++って感じですね。
このポインタやアドレスの説明読むとまあしょうがないそりゃそうだと思えるのだけど世間でよく言うように普通に挫折してそしてPHPやらなんやらで満足することになるのだろうな。
確かに初学者がこれ読んで「なるほど面白い」と思えるかと言うと素直にそうは思えないですがこれは非常に重要なことなので是非この難関を突破して欲しいところですね。
そしてクラスの説明もやっと登場。
とてもとても初歩的なクラスの説明だけど基本は大事だからしっかり身につけたいところ。
登録:
投稿 (Atom)