2009/04/29

[SQL]キー制約を削除する(キー制約名を取得して)

キー制約名の取得はこちら↓
[SQL]主キー(PrimaryKey)制約名を取得する

キーを追加したり変更したりする必要がある場合、キー制約名を取得してそのキー制約を削除したい、というケースがあります。

しかし、キーを削除する際は、キー制約名として変数を指定することはできません。
ALTER TABLE [dbo].[HogeTable] DROP CONSTRAINT @KeyName
⇒ 通らない

SQL文を生成して実行してあげればOK。
if (@KeyName <> '')
    EXEC('ALTER TABLE [dbo].[HogeTable] DROP CONSTRAINT ' + @KeyName)


達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)SQLパズル 第2版 プログラミングが変わる書き方/考え方プログラマのためのSQL 第2版SQL Hacks ―データベースを自由自在に操るテクニック

[SQL]Not Null 制約を付加する

こういうのよく忘れるのでメモ。

 

ALTER TABLE [dbo].[HogeTable] ALTER COLUMN [FooColumn] [int] NOT NULL

[SQL]主キー(PrimaryKey)制約名を取得する

主キーを追加したり変更したりする際に、一度キー制約を削除して付け直す必要があると思います。しかしキー制約名はそれぞれのDBによって違うかも・・・と言う場合はキー制約名を取得する必要が出てきます。
(本来、上記のどの状況も無いに越したことはありませんが)

Declare @PrimaryKeyName varchar (50)
Set @PrimaryKeyName =
(
  Select
   [name]
  From
   [sysobjects]
  Where
   [xtype] = 'PK'
  And
   [parent_obj] =
   (
     Select
      [id]
     From
      [sysobjects]
     Where
      [name] = 'HogeTable'
   )
)
If (@PrimaryKeyName <> '')
Select
  @PrimaryKeyName As PrimaryKeyName
Else
Select
  'Not Found' As PrimaryKeyName

実行結果:
見つかった場合
PrimaryKeyName
1 PK_HogeTable

実行結果:
見つからなかった場合
PrimaryKeyName
1 Not Found
MSSQLの場合です。

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)SQLパズル 第2版 プログラミングが変わる書き方/考え方プログラマのためのSQL 第2版SQL Hacks ―データベースを自由自在に操るテクニック

2009/04/28

[scheme]組み合わせ。combination(再)

 

[scheme][Gauche][DrScheme]組み合わせ(combination)

(define combination
  (lambda (r l)
    (cond
     ((null? l) '())
     ((or (zero? r)(> r (length l))) '())
     ((= r 1)(map list l))
     ((= r (length l))(list l))
     (else (append (map (lambda (n)(cons (car l) n))
                        (combination (- r 1)(cdr l)))
                   (combination r (cdr l)))))))

 

実行結果

(combination 3 '(a b c))
;; => ((a b c))

 

(combination 3 '(a b c d))
;; => ((a b c) (a b d) (a . #0=(c d)) (b . #0#))

 

(combination 5 '(a b c d e f g))
;; => ((a b c) (a b d) (a . #0=(c d)) (b . #0#))
gosh> ((a b c d e) (a b c d f) (a b c d g) (a b c e f) (a b c e g) (a b c . #0=(f g)) (a b d e f) (a b d e g) (a b d . #0#) (a b . #1=(e . #0#)) (a c d e f) (a c d e g) (a c d . #0#) (a c . #1#) (a . #2=(d . #1#)) (b c d e f) (b c d e g) (b c d . #0#) (b c . #1#) (b . #2#) (c . #2#))

 

(combination 3 '(a b c d e f g))
;; => ((a b c) (a b d) (a b e) (a b f) (a b g) (a c d) (a c e) (a c f) (a c g) (a d e) (a d f) (a d g) (a e f) (a e g) (a . #0=(f g)) (b c d) (b c e) (b c f) (b c g) (b d e) (b d f) (b d g) (b e f) (b e g) (b . #0#) (c d e) (c d f) (c d g) (c e f) (c e g) (c . #0#) (d e f) (d e g) (d . #0#) (e . #0#))

 

あってる?

2009/04/27

[SQL]サブクエリで取得した値をInsertしたい

などと思って書きました。
BEGIN TRAN

INSERT INTO
HogeTable
SELECT
  (SELECT
    COALESCE(MAX([HogeID]), 0) + 1
   FROM
    [HogeTable])
, 'foo.txt'
, NULL
, (SELECT DISTINCT
    [ServerFolderPath]
   FROM
    [HogeTable]
   WHERE
    [ClientFolderPath] = 1)
,1
, 28
, 0
, 0

SELECT
*
FROM
HogeTable

ROLLBACK

当初、Insert Into (…) Values (…)で書いたらスカラ値がどうのこうのってSQLServerに怒られたのでInsert Into ~ Select ~でやってみました。

INSERT文とかUPDATE文とか作るときBegin Tran ~ RollBackで囲むと便利だと気づいたのはココ最近;;


達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)SQLパズル 第2版 プログラミングが変わる書き方/考え方プログラマのためのSQL 第2版SQL Hacks ―データベースを自由自在に操るテクニック

[The Little Schemer]5章の途中まで

The Little Schemer

昨日の続き

;((5. *Oh My Gawd*:It's Full of Stars) 80)
(define rember*
  (lambda (a l)
    (cond
     ((null? l) '())
     ((atom? (car l))
      (cond
       ((eq? a (car l))
        (rember* a (cdr l)))
       (else (cons (car l)
                   (rember* a (cdr l))))))
     (else (cons (rember* a (car l))
                 (rember* a (cdr l)))))))

 

(define insertR*
  (lambda (new old l)
    (cond
     ((null? l) '())
     ((atom? (car l))
      (cond
       ((eq? old (car l))
        (cons (car l)
              (cons new
                    (insertR* new old (cdr l)))))
       (else (cons (car l)
                   (insertR* new old (cdr l))))))
     (else (cons (insertR* new old (car l))
                 (insertR* new old (cdr l)))))))

 

(define occur*
  (lambda (a l)
    (cond
     ((null? l) 0)
     ((atom? (car l))
      (cond
       ((eq? a (car l))
        (add1 (occur* a (cdr l))))
       (else (occur* a (cdr l)))))
     (else (o+ (occur* a (car l))
               (occur* a (cdr l)))))))

 

なんだか、だいぶスラスラ書けるようになっててうれしいなぁー。まぁまだこんな簡単な問題だからだけれども。

[The Little Schemer]1章~4章までの問題

考え事しながら「The Little Schemer」の問題を頭から最後までやろうとしてたら途中で眠くなってきたので続きはまた後日。

The Little Schemer」は、今2周目を楽しんでいる。

;((1. toys) 2)
(define atom?
  (lambda (x)
    (and (not (pair? x))
         (not (null? x)))))

 

;((2. Do It, Do It Again, and Again, and Again ...) 14)
(define lat?
  (lambda (lat)
    (cond
     ((null? lat) #t)
     ((atom? (car lat))(lat? (cdr lat)))
     (else #f))))

 

(define member?
  (lambda (a lat)
    (cond
     ((null? lat) #f)
     (else (or (eq? a (car lat))
               (member? a (cdr lat)))))))

 

;((3. Cons The Magnificent) 32)
(define rember
  (lambda (a lat)
    (cond
     ((null? lat) '())
     ((eq? a (car lat))(cdr lat))
     (else (cons
            (car lat)(rember a (cdr lat)))))))

 

(define firsts
  (lambda (l)
    (cond
     ((null? l) '())
     (else (cons
            (car (car l))
            (firsts (cdr l)))))))

 

(define insertR
  (lambda (new old lat)
    (cond
     ((null? lat) '())
     ((eq? old (car lat))
      (cons old
            (cons new (cdr lat))))
     (else (cons
            (car lat)
            (insertR new old (cdr lat)))))))

 

(define insertL
  (lambda (new old lat)
    (cond
     ((null? lat) '())
     ((eq? old (car lat))
      (cons new lat))
     (else (cons
            (car lat)
            (insertL new old (cdr lat)))))))

 

(define subst
  (lambda (new old lat)
    (cond
     ((null? lat) '())
     ((eq? old (car lat))
      (cons new (cdr lat)))
     (else (cons
            (car lat)
            (subst new old (cdr lat)))))))

 

(define subst2
  (lambda (new o1 o2 lat)
    (cond
     ((null? lat) '())
     ((or (eq? o1 (car lat))(eq? o2 (car lat)))
      (cons new (cdr lat)))
     (else (cons
            (car lat)
            (subst2 new o1 o2 (cdr lat)))))))

 

(define multirember
  (lambda (a lat)
    (cond
     ((null? lat) '())
     ((eq? a (car lat))
      (multirember a (cdr lat)))
     (else (cons
            (car lat)
            (multirember a (cdr lat)))))))

 

(define multiinsertR
  (lambda (new old lat)
    (cond
     ((null? lat) '())
     ((eq? old (car lat))
      (cons (car lat)
            (cons new
                  (multiinsertR new old (cdr lat)))))
     (else (cons
            (car lat)
            (multiinsertR new old (cdr lat)))))))

 

(define multiinsertL
  (lambda (new old lat)
    (cond
     ((null? lat) '())
     ((eq? old (car lat))
      (cons new
            (cons (car lat)
                  (multiinsertL new old (cdr lat)))))
     (else (cons (car lat)
                 (multiinsertL new old (cdr lat)))))))

 

(define multisubst
  (lambda (new old lat)
    (cond
     ((null? lat) '())
     ((eq? old (car lat))
      (cons new
            (multisubst new old (cdr lat))))
     (else (cons (car lat)
                 (multisubst new old (cdr lat)))))))

 

;((4. Numbers Games) 58)
(define add1
  (lambda (n)
    (+ n 1)))

 

(define sub1
  (lambda (n)
    (- n 1)))

 

(define o+
  (lambda (n m)
    (cond
     ((zero? m) n)
     (else (add1 (o+ n (sub1 m)))))))

 

(define o-
  (lambda (n m)
    (cond
     ((zero? m) n)
     (else (sub1 (o- n (sub1 m)))))))

 

(define tup?
  (lambda (tup)
    (cond ((null? tup) #t)
          ((number? (car tup))
           (tup? (cdr tup)))
          (else #f))))

 

(define addtup
  (lambda (tup)
    (cond ((null? tup) 0)
          (else (o+ (car tup)
                    (addtup (cdr tup)))))))

 

(define o*
  (lambda (n m)
    (cond ((zero? m) 0)
          (else (o+ n (o* n (sub1 m)))))))

 

(define tup+
  (lambda (tup1 tup2)
    (cond
     ((null? tup1) tup2)
     ((null? tup2) tup1)
     (else (cons (o+ (car tup1)(car tup2))
                 (tup+ (cdr tup1)(cdr tup2)))))))

 

(define >
  (lambda (n m)
    (cond
     ((zero? n) #f)
     ((zero? m) #t)
     (else (> (sub1 n)(sub1 m))))))

 

(define <
  (lambda (n m)
    (cond
     ((zero? m) #f)
     ((zero? n) #t)
     (else (< (sub1 n)(sub1 m))))))

 

(define =
  (lambda (n m)
    (cond
     ((zero? m)(zero? n))
     ((zero? n) #f)
     (else (= (sub1 n)(sub1 m))))))

 

(define =
  (lambda (n m)
    (cond
     ((> n m) #f)
     ((< n m) #f)
     (else #t))))

 

(define expt
  (lambda (n m)
    (cond
     ((zero? m) 1)
     (else (o* n (expt n (sub1 m)))))))

 

(define divide
  (lambda (n m)
    (cond
     ((< n m) 0)
     (else (add1 (divide (o- n m) m))))))

 

(define length
  (lambda (lat)
    (cond
     ((null? lat) 0)
     (else (add1 (length (cdr lat)))))))

 

(define pick
  (lambda (n lat)
    (cond
     ((zero? (sub1 n))(car lat))
     (else (pick (sub1 n)(cdr lat))))))

 

(define rempick
  (lambda (n lat)
    (cond
     ((zero? (sub1 n))(cdr lat))
     (else (cons (car lat)
                 (rempick (sub1 n)(cdr lat)))))))

 

(define no-nums
  (lambda (lat)
    (cond
     ((null? lat) '())
     ((number? (car lat))
      (no-nums (cdr lat)))
     (else (cons (car lat)
                 (no-nums (cdr lat)))))))

 

(define all-nums
  (lambda (lat)
    (cond
     ((null? lat) '())
     ((number? (car lat))
      (cons (car lat)(all-nums (cdr lat))))
     (else (all-nums (cdr lat))))))

 

(define egan?
  (lambda (a1 a2)
    (cond
     ((and (number? a1)(number? a2))
      (= a1 a2))
     ((or (number? a1)(number? a2))
      #f)
     (else (eq? a1 a2)))))

 

(define occur
  (lambda (a lat)
    (cond
     ((null? lat) 0)
     ((eq? a (car lat))
      (add1 (occur a (cdr lat))))
     (else (occur a (cdr lat))))))

 

(define one?
  (lambda (n)
    (= n 1)))

 

(define rempick
  (lambda (n lat)
    (cond
     ((null? lat) #f)
     ((one? n)(cdr lat))
     (else (cons (car lat)
                 (rempick (sub1 n)(cdr lat)))))))

2009/04/23

[Clipping]2006/10/31の自分宛メモメール

ほとんど引用元不明・・・。

 

 

時おり人生で失敗しなかったら、それはあなたが革新的なことをしていないという証拠だ。
  • ウッディ・アレン

 

目的に沿った道も道だが、目的が見えない道も道だ。
見えない目的を探しながらくねくね歩いていくことにも価値はあると思う。

 

弱者には弱者の正攻法がある。
凡人が天才に挑む時、敬遠を含むあらゆる 手段を行うのは当然だ。
凡人は天才の引き立て役ではない。
又、勝つ為の手段に正当も卑怯もない。
あえて言おう。勝てば官軍であると。
正義が必ず勝つのなら、負けた奴らが卑怯者なのだ

 

「もし今日が自分の人生最後の日だとしたら、今日やる予定のことを私は本当にやりたいだろうか?」。それに対する答えが"NO"の日が幾日も続くと、そろそろ何かを変える必要があるなと、そう悟るわけです。

 

愚者は教えようとし、賢者は学ぼうとする。

 

「そうだな…わたしは"結果"だけを求めてはいない。
"結果"だけを求めていると、人は近道をしたがるものだ…
近道した時真実を見失うかもしれない。
やる気も次第に失せていく。
大切なのは『真実に向かおうとする意志』だと思っている。
向かおうとする意志さえあれば、たとえ今回は犯人が逃げたとしても、
いつかはたどり着くだろう?
向かっているわけだからな…違うかい?」

 

真に幸せな日とは明日この幸せが無くなると分かっている日と、明日幸せになれると分かっている日だ

[Clipping]2006/08/28の自分宛メモメール

引用元不明

女性は、きれいなベッドが好き

[Clipping]2006/08/21の自分宛メモメール

ほとんど全部が引用元不明・・・。

なんとなく、あれだったかなーってのもあるけど不確か。このころは引用元をはっきりさせとく習慣がなかった・・・。わかるものがあったら教えてください。

 

改めて見ると結構面白いものがある。

 

その人が起こしたい行動は大抵の場合決まってて、後押しして欲しいだけだと思う

 

時間は有限。そして、誰にも同じく等しくあるものだから、有効に使わないと行けませんね。

 

正直さには、自分の中にためておくのが辛いから、相手にぶちまけてしまうという弱さが隠れている。
相手を傷つけるより、自分が傷つくのが怖いのだと思う

 

恋に所有権を持ち込むなんて全く馬鹿げていると思う。

 

好きなことをして生きるために
好きな居場所を自分で作る。

 

見てもいないことを見たかのように話す
無神経さと頭の悪さには呆れてしまう

 

刑罰は被害者を救済するために
加害者に対して公的報復を行うためにあるのではない。

 

女性は、「男性の性はシンプル」だと思い、
男性は「女性の性は複雑」だと考えている。

 

不特定多数に好意を示してもらわないと
自分の価値を実感できないバカ

 

すごく物事を決め付けるタイプで、
でも自分は常にニュートラルだと思い込んでるタイプ
自分がスタンダードだと思い込むのは結構だけど、
人を否定する物言いをするのはどうかと思う

 

出来るだけ少人数で小資本で、ということを考えると、
在庫を抱えるなんてリスク以外の何者でもない。

 

各自の才に価値を求めているくせに違う思想の人間を
排斥しようとしている

 

英雄を英雄たらしめるためには傍観者に
よるレスポンスが必要

 

自分の面が曲がっているに鏡をせめて何になる
鏡は悟りの具にあらず、迷いの具なり

 

理解なんてものはおおむね願望に基づくもの

 

シーザーを理解するためにシーザーである必要はない

 

否定する人が、否定される人より優れているとは限らない

 

ちゃんと2本の足が生えてるだろ!
だったら自分で立て!
お前はジオングか!

 

戸締りばかり気にする女たち。
ドアをノックする勇気もない男たち

 

好きなものがあるから、人は自分の人生を生きられるんだ。
自分の人生の主人公でいられる。
でも、好きなものがなかったら誰かの人生の脇役だから、
じゃあ主人公は「お金持ちやエリートがいい」
ってなってしまうよね

 

「好きなことを仕事にしよう」って、
みんな言いすぎなんだな。
その前にまず「好きなことをしよう」
「仕事につながりそうなものを好きになろう」
なんて限定してしまったら、
本当に好きなものは見つからない。

 

「気合や忍耐じゃない、技術と訓練だ」
「ブラインドタッチと同じ、反復練習しかない」

 

ある一部の人たちの間だけで支持されていたものが、
広く普及していこうとしたとき、
その最大の障害となるのは元からの支持者である

 

目の前の天秤に気を取られて、
それ自体がより大きな天秤の片方の皿に
乗っていることに気付いていなかった。

 

体の痛みも、心の痛みも、根性とか精神論だけでは乗り切れない場合がある事

 

 

たぶんこの辺↓からのものが多いはず。

59番目のプロポーズ キャリアとオタクの恋
アルテイシア
美術出版社
売り上げランキング: 51151
おすすめ度の平均: 4.0
1 う〜ん・・・
5 価値観を変えてくれた本
4 大切なことに気づかせてくれた一冊
4 キャラを演じているように感じました
3 うーん・・・また便乗本か??
攻殻機動隊 (1)    KCデラックス
士郎 正宗
講談社
おすすめ度の平均: 4.5
5 ネットは広大だわ
5 時間を作って読みたい漫画
5 フチコマかわいいなぁ
5 十五年前に描かれたものとは思えませんです
5 本格SF漫画。

2009/04/22

[essay]守破離

前のブログに書いてる内容です。ちょっと目に留まったので読み返してみました。

会社の日報に書く文章として書いていてこんな文章が出来上がるのだから恐ろしい。

実際に日報に書かなくてよかったなーと思います。

 

■守破離について
「守」「破」「離」 (しゅはり) とは

プログラマは特に「守」が必要だ。


独学?自己流?そんなものは「守」「破」ができていない人間が嬉々として口にして良い言葉ではない。
恥を知るべきである。


「守」における指導者に、身近な人間を選ぶにはリスクが高すぎる。
プログラミングにおいては指導者たる資質/経験/技術を兼ね備えた人間はまずいないと考えて間違いない。


経験年数ばかりが上滑りして「守」「破」をスキップした自称熟練ばかりだ。


であれば、やはり先人の経験/失敗/ケーススタディ/ベストプラクティスが詰まった「書籍」を師と仰ぎ、「守」「破」を実践するのが妥当であると私は考えている。


守破離やプログラミングに限らず、本を読めば全てうまくいくとまでは考えていないが、読まないことでうまくいかないことは数限りなくある。


守破離も学習(読書)もいつ始めても遅すぎるということはない。
今日からの人生で今日が一番若いのだから、「本気出す」のは今日、今この瞬間しかない。

 

改めて読んでみるとアグレッシブですね。まぁ、これを実際に日報に書いていないとはいえ、他に痛々しいことを書いているわけなのですが。

[book]読書状況

 

Stack Stock Books

 

今読んでいる本。

WS0694 

もう読み終えた本。

WS0696

まだ読んでいない本。

WS0695

 

改めて見ると・・・・、読んでないなぁ・・・・。これ、使い始めてちょうど一年くらいです。積読も多い・・・。

あと最近読み終えた本が怪しいの多い(w

絵本がたくさんあるところに行く機会があったので読んだわけです。

 

保育士の資格を持ってたりします。保育士として就職したことはないのですが・・・。大学4年の時に突如プログラマを目指し、めでたく(?)プログラマに。めでたしめでたしハッピー><

[blogger][tag cloud]ラベルをタグクラウドにしてみた

WS0693

タグクラウドにした↑なうい。

さっきまではこんな↓

WS0692

 

2009/04/21

[squeak]squeakってみた

WS0687

 

前回、前々回と参加した「ばりかた勉強会@セキュリティとんこつ」で知り合った方にSqueakについて教えて頂いたので試してみました!きっかけはどうやら「熊本Ruby温泉」の感想を見ていただいたようで、そこでScratchについて書いていたのをご覧頂いたようです。ありがとうございます><

Schemeであつくなった脳をクールダウンさせるときにでもいかがでしょう。

ということでしたので、早速(ではないけど)試してみます!

メールで教えて頂いた内容をメモ代わりに転記します。

 

  • squeak
  • 起動
    • windows
      • win_seaside.bat
        • ちなみに中でsqueak.exeが引数付で叩かれていたので、squeak.exeを単体で叩いたけどimageを選択しなさい、のようなファイル選択ダイアログが起動しました。
    • linux
      • inux_seaside
    • mac
      • mac_seaside.command
  • 計算してみる
    • 入力できるところであればどこでも良い
    • alt + p で実行
      • 適当に1 + 1と入力して実行してみると
      • WS0688
      • 実行結果
        • 2

 

(ちなみに「 1 + 2 * 3 」は期待と違うと思うのですがSqueakのおもしろいとこです。)

ということだったのでやってみると・・・・。

WS0690

おー。確かに変。なんで?一般的な優先順位は無視して先頭から順に計算されるとか?

ちゃんと括弧でくくれと?

WS0691

そのようです。

 

 

メールより引用:

同じように 1 + 1 をマウスで選択、右クリックで「式をデバック」するとデバッカー起動します。

「do it」:式を評価: プログラム実行

「print it」:式を表示: プログラム実行で結果を表示

「inspect it」:式をインスペクト: 結果内容を表示

あとウェブサーバも起動してますのでアクセスして楽しんでください。

 

 

不思議な感じです。今のところ何をどうしていいのかわかりません^^;

WS0689

 

 

[C#]TextViwer

さらにどうでもいいツール。昨日仕事中に一瞬の必要性のために一瞬で作った。

WS0683 WS0682 WS0684

  • 指定したフォルダ内のファイルをテキストとして読み込む
  • Ctrl+n、Ctrl+pでファイル変更(ドメインアップダウンコントロール)

ただそれだけ。

[C#]CSV編集

探せばいくらでもあるんだろうけど、今日やる作業のために自作した。

エクセルでやればいいのかもしれない。しかし私はoffice製品オンチ。(ただの食わず嫌いだと思うけど)

CsvEditor

  • フォーマット
  • 正規表現置換
  • 連番採番
  • 基準カラムの値が同じ間だけ連番採番
  • かな ⇒ カナ
  • カナ ⇒ かな
  • 全角 ⇒ 半角
  • 半角 ⇒ 全角
  • カラム追加/削除
  • CSV保存
  • SQLライクなフィルタクエリ
  • SQLライクな並び替えクエリ
  • データ編集

 

ソースは馬鹿正直な感じなのでさらすまでも無くご想像の通り。なんかGUIが古臭くなるよねー。

 

こういうの作ってる時に思うのが、DSLなりLLなりが手軽に使えたら入力として渡せるのに・・・って。つまり変換処理部分や条件の部分だけLLのコードを外部入力として渡せたらなーとか。IronScheme希望。はい、そのうち作ります。

作らなくてもC#4.0なんかだとできるのかな?ちなみにこれはまたもや1.1です。面目ない。

 

 

追記:

CsvEditor3

  • Empty to Pre Valueを追加した
    • 空のフィールドは同一カラムの最も近い上部の空でないフィールドから持ってくる

 

ガラクタなので公開する気はありませんが、こういうの作ると便利じゃね?みたいなね。。。こういうソフトで高機能なものがフリーであったら教えてください。


C#クックブック 第3版

[C#]フォーマット

よく忘れるので改めてメモ。
"{0, 4}" “   1”
{0, -4}" “1   ”
"{0:D4}" “0001”
"{0:0000}" “0001”
"{0, 8:D4}" “    0001”

絶対現場主義Visual C#実践講座―開発の現場から生まれた実践テクニック&TIPS集VSTOとSharePoint Server 2007による開発技術 Visual Studio 2008で構築するOBAソリューション (Programmer’s SELECTION)

2009/04/20

[The Little Schemer]読了。SICPで挫折した人はこちらからいかが?

 

The Little Schemer

SICPで挫折した人は、まずこちらから読むことをオススメしたいです。

 

英語が読めなくても大丈夫です!私もまったく読めなかったのですが、読み進めるうちにだんだん読めるようになりました。英語的に難しいことは書いてありません。(内容的には後半が突然難しいですが)

 

読み始めは英語への抵抗でかなり読むスピードが遅かったのですが、だんだん普通に読めるようになりました。この本のお陰で洋書への抵抗が薄れました。

 

しかし、やっと読了しました。まだ読み込みと書き込み(コード)が足りないのですが・・・。わからないところもあるます。しかし面白かったー。Y Combinatorもカリー化もわかりやすかった。アッカーマン関数とかCollatz問題とかも出てきた。あとは普通に高階関数とかクロージャとか。個人的に一番面白かったのは加減乗除を再帰でやるというNumbers Games。

 

次は「The Seasoned Schemer」を読む!

 

その次はどれにしよう・・・。取り合えず全部買い揃えてあります><

  • The Reasoned Schemer
  • プログラミングGauche
  • Shcemeによる記号処理入門
  • SICP
  • 計算論

 

 

The Little Schemer

紀伊国屋BookWebで買いました。

めちゃくちゃおもしろくて素敵な本ですが、紙質がまずいです。濡れたらティッシュ並みです。(風呂で本を読むのが好きなので)

The Little Schemer

The Little Schemer

posted with amazlet at 09.03.30

Daniel P. Friedman Matthias Felleisen
Mit Pr
売り上げランキング: 16078

おすすめ度の平均: 5.0

5 小さなScheme処理系で学ぶ数学基礎理論
5 Schemeが好きになります
5 英語であるのが苦痛にならない楽しさ
5 面白いスタイル

Amazon.co.jp で詳細を見る

 

The Seasoned Schemer

こちらはアマゾンだったっけ、紀伊国屋BookWebだったっけ。

The Little Schemerに比べて紙質が格段によくなってます。

以下アマゾンの書評より引用。

この本ではletrecとcall/ccが中心になります。

The Seasoned Schemer

The Seasoned Schemer

posted with amazlet at 09.03.30

Daniel P. Friedman Matthias Felleisen
Mit Pr
売り上げランキング: 18883

おすすめ度の平均: 5.0

5 Little Schemer とセットで

Amazon.co.jp で詳細を見る

 

これはアマゾンで先日買いました。以下アマゾンの書評より引用。

miniKANREN 上でのプログラミングを全編で行います。 miniKANREN は Scheme 上に構築した論理型言語で、DSL の形態になっています。

論理型言語だって><Prologみたいな?

SICP や On Lisp を読み終わっているぐらいの知識が必要だと思います。

難易度が高いってことだなー。On Lispも買おう!

The Reasoned Schemer

The Reasoned Schemer

posted with amazlet at 09.04.13

Daniel P. Friedman William E. Byrd Oleg Kiselyov
Mit Pr
売り上げランキング: 2877

おすすめ度の平均: 5.0

5 論理型プログラミングから学ぶ処理系作成

Amazon.co.jp で詳細を見る

 

こちらはアマゾンにレビューがないんですが、ググってみると好評っぽいので読んでみたくなりました。意外と薄いです。

Schemeによる記号処理入門

Schemeによる記号処理入門

posted with amazlet at 09.04.13

猪股 俊光 益崎 真治
森北出版
売り上げランキング: 45851

Amazon.co.jp で詳細を見る

 

これは今年頭に買ったけど、半分くらいで積読状態orz

The Seasoned Schemerを読み終えたら、また最初から読もうかな。

プログラミングGauche

プログラミングGauche

posted with amazlet at 09.03.17

Kahuaプロジェクト
オライリージャパン
売り上げランキング: 41303

おすすめ度の平均: 5.0

5 日本が米国に先行している稀な事例

Amazon.co.jp で詳細を見る

 

これは関連するかなーとか勝手に思って。面白そうだったし。評判もわりとよさそうなので。

計算論 計算可能性とラムダ計算 (コンピュータサイエンス大学講座)

計算論 計算可能性とラムダ計算 (コンピュータサイエンス大学講座)

posted with amazlet at 09.04.13

高橋 正子
近代科学社
売り上げランキング: 13298

おすすめ度の平均: 5.0

5 ラムダ計算のモデル論への最適な入門書
5 十分難しい
5 入門書として最高の一冊

Amazon.co.jp で詳細を見る

 

最終目標。去年の年末に買ったけど、速攻挫折(笑

笑えないけど。これを読むためにThe Little Schemerを買ったようなものです。その他も。

計算機プログラムの構造と解釈

計算機プログラムの構造と解釈

posted with amazlet at 09.03.17

ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 123513

おすすめ度の平均: 3.0

1 訳が酷い
4 紙と鉛筆と計算機と
1 内容最高。翻訳最低。
5 食わず嫌いでした。
5 プログラマにとって必読の本です

Amazon.co.jp で詳細を見る