top recent

プログラミング言語:Haskell

関連ページ

プログラミング言語 プログラミング

目次

  1. ええと...
  2. チュートリアル...
  3. 最近の悩み...
  4. Haskellの対話性...
  5. モナド...
  6. Bottom _|_ って...
  7. ム板Haskellスレより...
  8. プログラム工学VI 授業関連資料...

ええと

たしかλと表記する代わりにバックスラッシュを使うんですよね。
理由は「形が似てるから」って。

日本人にはつらい仕様だ。

[[id:790]] 2002-06-27 09:20:17


チュートリアル

http://www.sampou.org/haskell/tutorial-j/index.html

[[id:813]] 2002-06-29 00:11:35


最近の悩み

チュートリアル (#2)を読みながら手元で簡単にインストールできた hugs-Feb.2001 というのにコード例を打ち込んでみてるんだけど、ことごとくシンタックスエラーなってしまって…。
1+1
--> 2
とかくらいしか答えが返って来ないんです。(涙

-コード例をプレーンテキストで保存して(「○○.hs」という名前にすると良い?)HugsにD&Dしてみては?これで読み込まれるはず。後はコマンドラインからコード例の関数を使ってみてください。
-- :e(dit), :l(oad), :r(eload). :? for more detail.
--Haskellは非正格(積極的遅延実行)のためLispやSmalltalkのような対話的な(処理後や実行中に処理の内容を変える)処理系は作れないようです。(ごまかす方法はなきにしも在らずなのでしょうが。)だから、こんな仕様になっているようです。
--- 非正格性より静的型付けの方が影響するんだと思う.
--- 型が変わらないなら実行中に実装を変更できる気も・・・VBとかでは出来るし
--- VBってVisualBasicのことですか?
---そです

----
おっしゃる通り、 :e a.hs などとしてファイルの中にコードを書いたら実行できました。しかし難しいですね。モナドのところとかチンプンカンプンですわ。
-ListMonadで遊んでみては?

[1,2,3] >>= (\ x -> [1,2,3] >>= (\y -> return (x/=y) >>=
(\r -> case r of True -> return (x,y)
_ -> fail "")))

[[id:839]] 2002-07-09 23:55:26


Haskellの対話性

Re: 最近の悩み (#3)
> 非正格性より静的型付けの方が影響するんだと思う.
> 型が変わらないなら実行中に実装を変更できる気も・・・VBとかでは出来るし

対話的に定義を入力できない、定義と評価を交互に行なえないというのは、つまり定義が全部終わっていることが保証できないと評価を開始できないということですから、非正格性のほうが理由のような気がします。
評価の途中で実装を変更できてしまうと、型だけ同じでも変更前と後で関数の返す値が同じであることを保証できなくなってしまいますよね。--SHIMADA

[[id:968]] 2002-08-09 18:58:08


モナド

class Monad m where
(>>=) :: m a -> (a -> m b) -> m b

という謎めいた文字列の意味がやっと分かるようになりました。まさか中置演算子だったとは‥‥‥。(←気づくのが遅いって)

で、リストモナドというのは m a が [a] であるようなモナドなんですよね。

[[id:967]] 2002-08-09 16:39:55


Bottom _|_ って

もしかしてnilとかNULLからFalseの概念を取り除いたようなものでしょうか。

FalseはBoolの値だから違うでしょ
- ↑は Bottom != False だよ、とおっしゃっているのでしょうか?
- C系やLISP系では nil/NULL を偽(False)の意味でも使ってしまっているけど、そういう混同を取り除いた純粋な「未定義値」「不定値」みたいなものかなと思ったんですが…。--SHIMADA
--上の文章を書いたものです。結論から言うとSHIMADAさんの意見で正しいと思っています。言い訳を書かしてもらうと、証明不可能とか単一化できないとかという意味もあったはずです。
---Buttom(_|_)は形式論理学(超数学、Meta数学)で良く使われる記号です。記号なので、それ自体に意味は無いようです。そのつど記号に意味を付けるので、文脈によって変化します。わかりづらいです。(というか私が判っていないだけか?)
- エラーあるいは計算中であることを示すのに使います。ようするに値を確定できない状態。nilあるいはFalseのような確定した値ではありません。 -- Haskeller

[[id:941]] 2002-09-19 21:22:20


ム板Haskellスレより

222 名前: 司馬乱 投稿日: 2001/08/24(金) 02:41
>>197
> ただ、「継続」を理解すれば、モナドは楽勝かも。

どちらかというと逆で,具体的にどう書くかは別にして,
モナドを使うと一種の継続を表現することができます.
えーと,Rを仮想的な結果の型として
関数A->BをA->((B->R)->R)と見なすようにモナドを定義します.
このときB->Rが型Bの継続の型です.
また,これは状態遷移のモナドとはちょっと違うことに注意してください.
こちらはSを状態の型として関数A->BをA->(S->(B,S))と見なすように定義します.
これはAとSを同時に引数にとると考えると(この変換を非カリー化といいます)
(A,S)->(B,S)となるので状態がくっついている様子がよくわかります.

繰り返しておくと,上の定式化を比較すればわかるように
関数A->BをA->M(B)と見なすということが計算のモナドの基本的アイデアであり
状態遷移はその適用例の一つに過ぎません.
もともと表示的意味論を整理してモジュール化するというのが
意味論にモナドを持ち込んだ目的の一つでしたので,このメカニズムにより
状態や継続などを表現することは最初から考えられていました.

この書き込みを理解できればモナドOK! になるんだろうか‥‥‥。

[[id:1105]] 2002-09-02 19:29:01


プログラム工学VI 授業関連資料

http://www.teu.ac.jp/kougi/koshida/Prog6/index.html

[[id:1340]] 2002-10-16 00:40:40


top recent

HashedWiki version 3 beta
SHIMADA Keiki