SICP

cons,car,cdr

今日は、問題2.4をといてみます。問題2.4は、lispのconsと、carを (define (cons x y) (lambda (m) (m x y))) (define (car z) (x (lambda (p q) p)))と定義されているときのcdrはどう定義されるかと問題。ということで、cons,car,cdrのこの定義で実装 cons …

長方形を表現

SICPの問題2.3。長方形を表し、周囲の長さと面積を計算する手続きを作る。 今回は、問題2.2とほぼ同じなので、以下にソースと実行結果を示します。 $cat rectangle.hs data Point = Point Integer Integer instance Show Point where show (Point x y ) = "(…

平面上の線分

今日は、SICPの問題2.2を解いてみます。問題は、線分を表現するデータ構造を作り、その線分の中間点を求めよという問題。データ構造は、x座標と、y座標を表すデータ構造を作って、ポイントを表すデータ構造を作れとなっているんだけど、そこは割愛。そのかわ…

パスカルの三角形

SICPの問題1.12は、パスカルの三角形。 パスカルの三角形は、三角形の辺上の数は全て1。三角形の内部の数はその上の2つ上の数の和という三角形。 こんなかんじ 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 ............rubycoさんやtakatohさんがやられていたやつ。 SICP…

再帰的にプロセスと反復的プロセス

問題1.11は、次の定義を再帰的プロセスと反復的プロセスで書けというもの n < 3 のとき f(n) = n n >= 3 のとき f(n) = f( n -1 ) + 2f(n -2) + 3f(n-3)では、再帰的方法の実装から saikiF n | n < 3 = n |otherwise = saikiF ( n-1 ) + 2 * (saikiF ( n -2 …

アッカーマン関数

問題1.10はアッカーマン関数。また、いつもどおり、schemeで書かれている関数をHaskellに ackermann x y | y == 0 = 0 | x == 0 = 2 * y | y == 1 = 2 | otherwise = ackermann ( x -1 ) ( ackermann x ( y - 1))で、問題は次の引数のときの値は何か?だから…

置き換えモデル

置き換えモデルとは、どうやら出てくる関数を置き換えていって、最後に計算をするモデル。遅延評価といっていいのかな。問題1.9では、引数を1増やす手続きincと引数を1減らす手続きdecをつかって、2つの整数をたす方法を置き換えモデルを使い、4と5をたす過…

Newton法

章1.1.3にでてくるNewton法をやってみます。 Newton法とは、数xの平方根の値の予測値yがあれば、yとx/yの平均値とるという計算でさらにより路側値が得られるというものらしい。 とりあえず、本どおりに実装。 goodEnough guess x = (abs ( x - (guess * gues…

SICPの問題解いてくよ-問題1.3

次は、問題1.3。3つの引数をとり、そのうち大きい2つの引数の2乗を足したもの返す関数を定義するという問題。とりあえず、addpow :: (Num a) => a -> a -> aという、ふたつの引数の2乗を足す関数を定義。 addpow x y = (x*x) + (y*y) あとは、if文で大小関係…

SICPの問題解いてくよ

またまたまたおひさしぶりです。Haskoです。今日から、SICPこと計算機プログラムの構造と解釈の問題をHaskellで解いていこうかと思います。もともと、このネタは、日本のHaskellerなら誰もが知っているだろうnobsunさんこと山下伸夫さんがやられていたのを自…