« C86申し込みしました | Main | コミックマーケット86当選しました »

2014.03.30

Haskellに手を出してみた

本来インフラとネットワーク屋のはずなのですが。
Haskellに手を出してみました。理由としては、関数型言語のなかでは、SQLに慣れた目で見て
一番気持ち悪くなかったからと言うか。

うちのサークルのインフラ妹は、「管理者ならHaskellより先にshだよね」という趣旨のことを言ってますが……

とりあえず、「すごいHaskellたのしく学ぼう!」を読んでみました。(このリンクはアフィ無しです)

とりあえず2章までしか読んでないけど、正しくSQLを使っていれば難しくないです。でも、集合の概念とかを感じららない場合は相当難しいとおもいます。
おねーさんも、SQLやる前にHaskellに手を出してたら一章も読めなかったな。

というわけで、「すごH」本一章の最後にある問題をSQLで解いてみよう。
といってもSQLでおんなじことをするだけですが。
問題を簡単に説明すると、「編の長さが整数値となる直角三角形で、各辺の長さが10までで、外周の長さが24になるものを探せ」です。
リストの生成に相当するテーブルのその場生成はないので、1からはじまる十分に多い連続した整数のタプル(レコード)を持つテーブルtbl_intがあり、そのアトリビュートはnumであるとします。
以下、MySQLで動くものです。数学関数は適度に読み替えてください。

/*

t1 長辺 t2,t3 短辺とする

短辺長が整数の二等辺直角三角形のは、長辺が整数になり得ないので考慮する必要は無い

*/

-- 結果セット(会空間)は該当する直角三角形の各辺の長さ
SELECT t2.num AS a
     , t3.num AS b
     , t1.num AS c
-- 三辺で取りうる値の直積集合は、tbl_intのタプルを辺の長さと見て、取り得る三角形全ての集合となる
FROM tbl_int t1 , tbl_int t2 , tbl_int t3
-- 長辺辺の長さは10以下(残りは短辺なので、必ず10より小さい)
WHERE t1.num <= 10
-- この条件がないと同じ形で向きが違う三角形が出る
AND t1.num > t2.num AND t2.num > t3.num
-- 直角三角形で外周24の三角形を取り出す
AND pow(t1.num,2) = pow( t2.num , 2 ) + pow( t3.num , 2)
AND t1.num + t2.num + t3.num = 24

« C86申し込みしました | Main | コミックマーケット86当選しました »

Comments

Post a comment

Comments are moderated, and will not appear on this weblog until the author has approved them.

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/21181/59378151

Listed below are links to weblogs that reference Haskellに手を出してみた:

« C86申し込みしました | Main | コミックマーケット86当選しました »

My Photo

ブログパーツ

無料ブログはココログ
April 2017
Sun Mon Tue Wed Thu Fri Sat
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30