あとコメント欄もみやすくするように、以下のようなのを userContent.css に書いた。
@-moz-document domain("hatena.ne.jp") { a[class="keyword"], a[class="okeyword"]{ border: none !important; color: inherit !important; text-decoration: none !important; } a[class="keyword"]:hover, a[class="okeyword"]:hover{ border-bottom: 1px solid !important; } div.comment div.caption { font-size: 90%; padding: 0.5em 1em; } div.commentshort p { line-height: 1.5; padding: 0.5em 1em; } div.commentshort span.canchor { display: none; } div.commentshort span.commentator { display: block; border-bottom: 1px solid #fff; border-left: 1px solid #aaa; padding: 0 0 0.2em 1em; margin: 0 1em 0.5em 0; } }
以下のようなのを userContent.css に書いてみた。ページを登録しているユーザ数およびタグが見えなくなる。
@-moz-document domain("b.hatena.ne.jp") { dd, div[class="entry-footer"]{ display: none !important; } }
http://d.hatena.ne.jp/okumuraosaka/20060407#1144384800
性犯罪者の実態と再犯に関する分析
再犯調査の対象となった性犯罪者の再犯状況別構成比は,図2のとおりである。調査対象者のうち出所受刑者の再犯率は,39.9%(満期出所者では63.3%,仮出獄者では30.8%)であり,性犯罪再犯率は,11.3%(満期出所者では19.1%,仮出獄者では8.3%)であった。
これに対し,執行猶予者の再犯率は,13.5%(保護観察付き執行猶予者では18.8%,単純執行猶予者では12.1%)であり,性犯罪再犯率は,3.8%(保護観察付き執行猶予者では7.1%,単純執行猶予者では2.9%)であった
4 まとめ
今回の調査研究により,これまで統計的に必ずしも明らかでなかった性犯罪者の再犯率に関するデータを得られたほか,性犯罪者の実態及び再犯の状況等を類型別に明らかにするなどの成果を得ることができた。今回の調査では,性犯罪者の性犯罪再犯率は,出所受刑者が11.3%(満期出所者では19.1%,仮出獄者では8.3%),執行猶予者が3.8%(保護観察付き執行猶予者では7.1%,単純執行猶予者では2.9%)であった。
性犯罪者の類型別では,小児わいせつタイプには同種犯罪を繰り返す者が比較的多いことがうかがわれた。また,今回の調査対象者に関する限り,集団強姦タイプの性犯罪再犯率が0%であった。
再犯率は高いんだけど、それが性犯罪の再犯率の高さを意味しないという結果に(10%や20%でも十分高いという意見もあると思うけど)。
一般に平均と中央値というのは違うわけです。で、ふと思ったのだけど、平均寿命ではなくて、寿命の中央値ってどれくらいなんだろう。つまり、今の日本全国の0歳児の半分が亡くなるまでの予想年数。半減期。ちょっと探してみたけど、見つからない。さて。
コメントスパムのため、しばらくの間、ツッコミ禁止。
DVDレンタルのぽすれんを利用しているんですが、ここにきて
リニューアル延期 → リニューアル実施 → トラブってサービス停止
となんだか大変なことに。昨日頼んでおいたDVDは届いているので、個人的には文句ないのですが。
低解像度の動画を長時間見つづけると脳に異常を来す、とかいう説を広めるのはどうだろう。
『Haskell入門』を読んでいて分からないことがあると、「やさしい Haskell 入門 (バージョン98)」を読むと良さそうです。
『Haskell入門』を読んでいて、「型は第一級の対象ではない」ということをもっと強調した方が分かり良いのでは、とHaskellの入門者として感じました。あと、『Haskell は、型の違う関数が共通の名前を共有するような C++ 流の多重定義 はサポートしていない』(やさしい Haskell入門より)ということもどこかに書いてあった方がいいのではと思いました(書いてあるのかも知れないけど)。ようするに、以下のような foo の定義は出来ないと例を示して書いてある方が良いのではないかと。
foo a b = 2 foo a = 1
こなれていない文章が時々ありました。例えば、データ構築子の説明。
Trueのように引数がない場合は、Trueそのものがなにがしかのデータになっています。一方 Just 1 のように引数を取ることで、なにがしかのデータを作ることになります。データを作るもの、ということでこういうものをデータ構築子(data constructor)と呼びます。
『Haskell入門』p101
とあります。この文章からだと、引数を取らないTrueはデータ構築子ではないと読んだ人は勘違いするかも知れません。というか、僕はそう解釈しちゃったんですが、『やさしい Haskell入門』によれば、True も無引数のデータ構築子なんだそうです。
データ構築子は第一級の対象であるということも、明示的に書いてあった方が良いのではと思いました。
これはOK。
data Point a = Pt a a foo = Pt
以下のような foo の定義は駄目。
data Point a = Pt a a foo = Point
と、文句ばかり書いているようですが、とても面白い本です。いや、ほんと。
しました。
Haskell の関数の引数のパターンに何が書けて、何が書けないか。パターンの構文。
以下のものの適当な組合せだけが許される。
ので、関数は(第一級の対象なんだけど)パターンとして許されない。
foo (\x -> 1) = 1
は駄目。
data Point a = Pt a a foo Pt = 1
も駄目。
自分の理解のためにユーザ定義のデータ型の説明を書いてみます。間違っているかも知れません。
以下のような構文によって、新たなユーザ定義型(この例では Point)とそのコンストラクタ(この例ではPt)を同時に定義することが出来ます。Pointを型構築子(type constructor)、Ptをデータ構築子(data constructor)と呼びます。
data Point = Pt Integer Integer
コンストラクタ Pt は Integer 型の引数を二つ受けとり、ユーザ定義型 Point を返す関数です。関数ですから、第一級の対象です。以下は簡単な例です。上でも述べたように、関数の引数のパターンには「データ構築子 k1 ... kn」という形は許されています。
data Point = Pt Integer Integer foo :: Point -> Integer foo (Pt a b) = a main = putStrLn (show result) where result = foo (Pt 1 2) -- -> 1
で、結局、Point は型なのか型構築子なのかどっちなんだ、という疑問を持たれるかも知れません。Point は(無引数の)型構築子であり、Pointという型を生成する、というのが正解のようです。無引数の型構築子があるなら、引数を取る型構築子もあります。以下のようなものです。
Ptが受けとる数として整数だけでなく、小数も受けとりたい場合に型変数を使います。
data Point a = Pt a a
これで、
data Point a = Pt a a foo :: Point a -> a foo (Pt a b) = a main = putStrLn (show result) where result = foo (Pt 1.2 2.4) -- -> 1.2
となります。さてここで注意すべきことは、 foo の引数の型は「Point a」であって、「Point」ではないということです。Point は型変数 a を受けとって、新たな型「Point a」を作ります。まさに型のコンストラクタ(type constructor)ですね。型構築子には当然 型変数だけでなく、定義済みの型を与えることも出来ます。
data Point a = Pt a a foo :: Point Integer -> Integer foo (Pt a b) = a main = putStrLn (show result) where result = foo (Pt 1 2) -- -> 1
ユーザ定義型は次のように定義することも出来ます。
data Bool = False | True
これは「Bool型は2つの値 TrueとFalseを持っている」と解釈することが出来ますが、「Bool型は True と False というふたつの(無引数の)コンストラクタを持っていて、コンストラクタはそれぞれ(返す型は同じだけど)別の値を返す。」と解釈することも出来ます。
再帰的に定義することも出来ます。
data Tree a = Leaf a | Branch (Tree a) (Tree a)
これは、「Tree a 型」はふたつのコンストラクタ Leaf と Branch を持っている。Leaf は「a 型」を引数としてひとつとり、Branch は「Tree a 型」の引数をふたつ取る。それぞれのコンストラクタは別の値を返す。 と解釈することが出来ます。
f x | abs x < 1 = - x / (1 - abs x) | otherwise = x / (1 + abs x)
というコードを書いたら、丸め誤差のせいでなんだか哀しいことに。
*Main> f (f 2) -1.9999999999999996 *Main> f (f 3) -3.0 *Main> f (f (-4)) 4.000000000000001
と思ったら間違っていた。悲しい。
*Main> f (f 0.1) 0.12500000000000003
Google で観観観 filetype:pdfなどを検索すると、愉快な検索結果になってしまう。M.C.P.C.より。
タブ関連では、
でしょうか。最初のふたつは有名だからいいとして、Vertigoはタブを縦に並べる(だけ)の拡張機能。ただこれだけの機能なんだけど非常に便利。これがあるとスクロールバーなしで30くらいタブを並べることができる。ただし、Tab Mix Plus との組合せで、タブのドラッグアンドドロップで表示に不具合が生じる場合がある。Tab Mix Plus のオプション→表示→タブバー→ドロップインジケーターを「TMPに内蔵のスタイル」に設定するとある程度改善される。Colorful Tabs はそのなのとおりタブに色をつける。残念ながらTabbrowser Extensions みたいなサイト毎に色分けする機能はない。Upptiyは「ひとつ上がる」ボタンをツールバーに作成する。
Problematic extensionsというページを見つけた。
個人的に Haskell で難しいのはモナドや型などの概念よりも、型クラス宣言や制約などの文法です(制約ってどこに書けて、どこに書けないのかいまいちよくわからない)。「高階関数」の意味が分からないといっても検索すれば済むわけです。でも例えば、
f . g
の意味(関数の合成)が分からない場合、調べようがないわけです。文法(と演算子)は検索できない(あるいはチョー検索しにくい)!!
で、P143で
procChar . ord
と関数の合成がでてくるけど、関数の合成の説明はこの後の章のP154でされていてこれってどうなのよ的な。
あと、第5章で説明されるモナドクラスの定義(P119)は
class Monad m where return :: a -> m a (>>=) :: m a -> (a -> m b) -> m b
なんだけど。モナドクラスのインスタンスは型ではなくて型構築子なのね。つまり、型クラス宣言の構文は「型構築子クラス宣言」としても使えるわけだけど、それが本のどこを読んでもせちゅめいされていないってどうなのよ的な。この〈高階の〉型クラス宣言は、本当はやさしくない『やさしい Haskell 入門』においてさえも(5 型クラスと多重定義で)説明されているのだから、やっぱり説明が必要なところなんじゃないかと。
最近のコメント