私はハスケルを学んで私の心を広げようとしています。タイプ・ダダクションはどのようにハスケルで動作しますか?
マイ自ら招い宿題は私にポアソン分布する間隔を与えるクロックティック・ジェネレータを構築することで、最終的な結果は、(長い闘いの後、私は認める)このでした:
import System.Random
poissonStream :: (Ord r, Random r, Floating r, RandomGen g) => r -> r -> r -> g -> [r]
poissonStream rate start limit gen
| next > limit = []
| otherwise = next:(poissonStream rate next limit newGen)
where (rvalue, newGen) = random gen
next = start - log(rvalue)/rate
しかし、少なくとも私は理解できない2つのことがあります:
"Floating r
"と同様に "Ord r
"が必要なのはなぜですか? (私は何らかの自動継承を期待していたでしょう: "Floating"は "Ord"を意味します)
暗黙の型定義 "rvalue :: Float
"はどのようなパスで達成できますか?私は私が期待していたものを手に入れるGHCiの中 :
*Main System.Random> let (rvalue, newGen) = random (mkStdGen 100)
<interactive>:1:23:
Ambiguous type variable `t' in the constraint:
`Random t' arising from a use of `random' at <interactive>:1:23-43
Probable fix: add a type signature that fixes these type variable(s)
右辺値は、私がタイダウンする必要が緩い大砲です:
*Main System.Random> let (rvalue, newGen) = random (mkStdGen 100) :: (Float, StdGen)
*Main System.Random> rvalue
0.18520793
HaskellのN00Bで穏やかにしてください。
IMHOこれは単なる自己学習であれば、私は宿題としてタグ付けしません。宿題の質問は非常に人工的な問題を意味し、一般的にあなたが好む場合を除いて、あなたが得る答えの種類を変えます(あなたのためにレイアウトするよりはるかにヒントです)。 – cletus
@cletus:観察してくれてありがとう。私は現実世界の問題ではなく、これを運動として報告する方が良いと考えました。 –
私は「宿題」ではなく「趣味」または「自己学習」とタグ付けします。 「宿題」は「現実世界ではない」ことを意味するものではなく、「本当に私に答えを与えてはいけません。 – Chuck