〜アウディTTを買うその日まで〜@BLOG

30歳。
サラリーマンが月3万円のお小遣い
を貯めて、運用して、アウディTTを買うまで
の日記です。

連絡は afilhajime(スパム対策)@gmail.com
まで。
お気軽にどうぞ。
Schemeでリストの操作
すっかりSchemeプログラミング学習の記録に成り変っている
当プログですが、今日もSchemeネタです。

リストの操作を勉強してみた。

;;リストの操作

;;リストを作る
(list 1 2 3 4 5)
; ⇒ (1 2 3 4 5)
これでリストができた。

;;リストを束縛する
(define x '(1 2 3 4 5))
(define y '(6 7 8 9 10))
リストを2個作って xとy に束縛した。


;;リストの長さを数える(再帰)
(define (length- ls)
(if (null? ls)
0
(+ 1 (length- (cdr ls)))))
(length- x)
; ⇒ 5
リストの長さを数える関数を作った。
リストが空っぽなら0、そうでなければ+1して
残りを自分自身に設定する。これが再帰。


;;リストの結合(再帰)
(define (append- x y)
(if (null? x)
y
(cons (car x) (append- (cdr x) y))))
(append- x y)
; ⇒ (1 2 3 4 5 6 7 8 9 10)


;;リストの反転(再帰)
(define (reverse- ls)
(if (null? ls)
'()
(append- (reverse- (cdr ls)) (list (car ls)))))
(reverse y)
; ⇒ (10 9 8 7 6)

;;リストを結合して、反転
(reverse- (append- x y))
; ⇒ (10 9 8 7 6 5 4 3 2 1)

;;リストを結合して、反転してさらに反転
(reverse- (reverse- (append- x y)))
; ⇒ (1 2 3 4 5 6 7 8 9 10)

なんとなくリスト操作と再帰が分かってきた気がする。


□ 今の貯蓄
ネット銀行 103670円
証券会社 1,420,602円
現金 30,000円

合計1,554,272円
目標まであと2,845,728円

応援をお願いします。

人気ブログランキングへ
| じゅんのすけ | プログラミング | 22:37 | comments(0) | trackbacks(0) |
僕の本棚 にある Lisp の書籍
過去2回の挫折歴によって僕の本棚には
Lisp関連の書籍が何冊もある(涙

何を持ってるのか忘れてたので調べてみた。

↓にあるのは全部持ってる。













手放さずに良かった。
また勉強したいと思う日々がきたから。


□ 今の貯蓄
ネット銀行 3,670円
証券会社 1,483,963円
現金 35,000円

合計1,522,633円
目標まであと2,877,367円

応援をお願いします。

人気ブログランキングへ

| じゅんのすけ | プログラミング | 21:54 | comments(0) | trackbacks(0) |
無名関数 λ
今日覚えたこと。

Schemeでは無名関数を作ることができる。

lambdaを使う。ラムダと読む。λと書く。

一度きりしか使わない関数を作るとき
名前をつけなくても良いという利点がある(らしい)。

何が便利なのか?

λを理解する前に高階関数を知る必要がある。

□高階関数

関数を引数として受け取るのが高階関数だ。

(define (func proc)
(proc 5 10))

関数 func の引数proc に関数名を受け取る。
下のように実行してみると...

(func +)
(func -)
(func *)
(func /)

> (func +)
15
> (func -)
-5
> (func *)
50
> (func /)
1/2

関数名を引数に受け取って、その関数の中で
実行してしまう。
Cだと関数ポインタだ。

話をλに戻す。

□無名関数を作る

((lambda (x) (* x x)) 3) ; → 9

xを2乗する無名関数を作ってみた。
だからどうだってんだい!と思う。

名前をつければいいじゃないって。

どうやら無名関数λは高階関数と相性が良いらしい。

用意されている高階関数 map を使ってみる。
map はリストの各要素に関数を適用する関数です。

(define (pow x) (* x x))
(display (map pow '(1 2 3 4 5)))
; → (1 4 9 16 25)

2乗する関数powを作って、高階関数powに与えると
引数に与えたリストの要素がそれぞれ2乗される。

ためしにλを使って書くとしよう。

(map (lambda (x) (* x x)) '(1 2 3 4 5))
; → (1 4 9 16 25)

関数に名前をつけなくても同じことができた。

□何が嬉しいのか?
λについて解説しているサイトは多いけれど
何が嬉しいのか?まで言及している記述を探すのは大変だった。

IBM developerworksに記述があった。

引用

・プログラムの名前空間が、一度しか使用されない多くの関数で汚されることがありません。
・関数のコードをそれが使用される正確な場所に置くことができるので、プログラマーは1回限りの小さな関数のコードを探し回る必要がありません。
・関数とそれが渡される関数とを明確に関連付けることができるので、関数が使用されるコンテキストが他のプログラマーに分かりやすくなります。1回限りの関数がそれを呼び出す関数と離れた場所にあった場合、呼び出す関数が後から削除された場合、1回限りの関数も削除する必要があるのかどうか明確ではありません。


個人的には「名前を考えなくて良い」というのがメリットなのかな
と思う。

プログラミングしている最中、関数名を考えているとロジックを
考えてるんだか名前を考えてるんだか良く分からなくなることがあるから。



□ 今の貯蓄
ネット銀行 3,670円
証券会社 1,514,660円
現金 38,000円

合計1,556,330円
目標まであと2,843,670円

応援をお願いします。

人気ブログランキングへ

| じゅんのすけ | プログラミング | 23:41 | comments(0) | trackbacks(0) |
Schemeプログラミング環境構築
Schemeプログラミング環境構築。

会社のPCにはCygwin + gauche の組み合わせで構築。
家でインストールしようと思ったらconfigureで失敗。

なんとか簡単に構築できるソフトはないかと思って
探してみたら見つかった。

ChezEdit-NT
というWindows上で動くエディタ。

これと chez schemeをインストールすれば良いみたいだ。
(chez (chez scheme))

あっさり、動いたー。

(* 2 3) F2
でListenerが起動して
> (* 2 3)
6

簡単〜


□ 今の貯蓄
ネット銀行 3,670円
証券会社 1,509,533円
現金 40,000円

合計1,553,203円
目標まであと2,846,797円

応援をお願いします。

人気ブログランキングへ

| じゅんのすけ | プログラミング | 00:45 | comments(0) | trackbacks(0) |
Schemeというプログラミング言語
最近さぼりぎみなので理由を報告します。

Schemeというプログラミング言語を勉強してます。

SchemeはLISPの方言で、著名なプログラマがこぞって
すごい!と言っている。
まだ自分には理解できていない。
でもきっとすごいに違いないんだ。

人生で3回目くらいのSchemeブームなわけです。
といっても今までの2回は言語仕様を知るだけで終わり
自分のモノにはできなかった。

悟りを開くところまでは全然いけなかった...

22歳くらいでダメで26歳くらいでダメで
齢30歳を超えたいまなら理解できるんじゃないかと
思って挑戦している。

今ダメならきっとこの先もダメだろう。
最後の挑戦かもしれない。

ところで今まで2回あったSchemeブームのきっかけは
高林さんの
『計算機プログラムの構造と解釈』について
を読んだのが最初。

でその後が、普通のやつらの上を行けを読んだときだ。

今読んでも熱くなる。


□ 今の貯蓄
ネット銀行 3670円
証券会社 1,512,293円
現金 50,000円

合計1,565,963円
目標まであと2,834,037円

応援をお願いします。

人気ブログランキングへ
| じゅんのすけ | プログラミング | 23:04 | comments(0) | trackbacks(0) |

一番上へ