« 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


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

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

My Photo
無料ブログはココログ
January 2019
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 31