関数型プログラミング言語Haskell Part11at TECH
関数型プログラミング言語Haskell Part11 - 暇つぶし2ch2:デフォルトの名無しさん
09/09/08 13:04:00
関連書籍
・Introduction to Functional Programming Using Haskell
 URLリンク(www.amazon.co.jp)
・Haskell: The Craft of Functional Programming
 URLリンク(www.amazon.co.jp)
・The Fun of Programming
 URLリンク(www.amazon.co.jp)
・The Haskell School of Expression: Learning Functional Programming Through Multimedia
 URLリンク(www.amazon.co.jp)
・入門Haskell
 URLリンク(item.rakuten.co.jp)
・ふつうのHaskellプログラミング
 URLリンク(item.rakuten.co.jp)
・Programming in Haskell
 URLリンク(www.amazon.co.jp)
・Real World Haskell
 URLリンク(www.amazon.co.jp)

3:デフォルトの名無しさん
09/09/08 13:07:07
関連スレ
・関数型言語Part IV
 スレリンク(tech板)
・【数学者】Haskellはクソ言語【オナニー】
 スレリンク(tech板)
・純粋関数型言語Concurent Clean
 スレリンク(tech板)
・関数型言語ML (SML, OCaml, etc.), Part 6
 スレリンク(tech板)
・Lisp Scheme Part27
 スレリンク(tech板)
・【入門】Common Lisp その6【質問よろず】
 スレリンク(tech板)
・Emacs Lisp 3
 スレリンク(tech板)

4:デフォルトの名無しさん
09/09/08 13:07:56
GHC 6.6 の日本語の取り扱い
1. ソース中の文字列 hello = "こんにちは" :: String は UTF-8
2. これを ghci で表示することは可能:(ただし、環境変数 LANG を UTF-8 にしておくこと、
また、ターミナルも UTF-8 で入出力できるようにしておくこと)
Main> print hello
こんにちは
Main>
3. 入出力 IO は Latin-1 だが、
package utf8-string (URLリンク(code.haskell.org))
を導入することにより、入出力を UTF-8 にすることができる
4. その他の文字列エンコード(ShiftJIS, JIS, EUC-JP など) は、
package iconv (URLリンク(hackage.haskell.org))
で UTF-8 な文字列にする
とまあ、こういうことで、日本語表示できるわけだ。iconv package は MacOSX と *BSD では
cabal を少しいじらなければいけないことに注意しろよ(iconv.cabal のコメントに書いてある)

5:デフォルトの名無しさん
09/09/08 13:09:24
・そのほかの日本語の扱い

Haskell98によると、Charは一つのUnicode文字を表す(6.1.2)。
これに従って、比較的新しいHugsやGHC(6.4系を含む)ではCharは32ビット整数になっている。
ただし、どちらも入出力に際しての変換が完全でない。具体的には、
・ソースコード中の文字列リテラル
・System.IOライブラリでの入出力
が問題になる。

1. GHC6.4.2以前
ソースコード・入出力ともLatin-1を仮定する。Latin-1ではバイト値と
コードポイントが一致するので、入力時には外部エンコードの各バイトがそのままCharに
入り、出力時にはCharの下位8ビットのみが出力されるような実装になっている。
このため、あるエンコーディング(Latin-1とは限らない)の入力をgetLineで受け取り、
それをそのままputStrで表示すれば、入力時とおなじエンコードにおいて正しく表示される。
これを利用して、[Char]を、本来のコードポイントの列としてではなく、特定のエンコードの下での
バイト列として使うことができる。ただし文字列リテラルについては、GHCはLatin-1として
不正な文字を受け付けないので、EUC-JPのような例外を除くと、単純にリテラルを使うことはできない。

3.最近のHugs(非WindowsかつCのwchar_tがUnicodeの環境、というかLinux)
ソースコード・入出力ともロケールのエンコードを利用する。

4.最近のHugs(Windows)
ソースコード・入出力ともLatin-1を仮定する。ただし文字列リテラルにShift-JISを使ってもエラーにならない。

5.最近のHugs(それ以外)
未調査。

6:デフォルトの名無しさん
09/09/08 13:10:14
・結局どうするか。
規格どおりにCharにUnicodeを入れるか、Charを単なるバイトとして扱うかの二択。

i. CharをUnicodeとして扱う
(3)以外の場合入出力で変換が必要。(2)または(3)以外の場合文字列リテラルでは
明示的なエスケープ(たとえば"\22234")が必要。

ii. Charをバイトとして扱う
(3)ではファイルをバイナリモードで開くなどの対策が必要。(1)でEUC-JPを使う場合と(4)
を除き文字列リテラルでは明示的なエスケープ(たとえば"\143\153")が必要。
lengthやisAlphaのような関数、およびwin32パッケージの関数(win32API)が正しく動作しない。

7:デフォルトの名無しさん
09/09/08 13:51:07
                          刀、           , ヘ
                  /´ ̄`ヽ /: : : \_____/: : : : ヽ、
              ,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
               /: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
     ,. -─「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
    /: :.,.-ァ: : : |: : : : : : : : :    :\: : : : :: : : :ヽ  \   /: : : :/
    ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i  / /: : : : :/
     /: :     ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/  /: : : : :/         、
.    /: : /  . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : |  /: : : : :/            |\
   /: : ィ: : : : :.i: : |   \!___/ ヽ:: : : : : : :\|:.:.:.:/:!  ,': : : : /              |: : \
   / / !: : : : :.ト‐|-    ヽ    \: : : : : l::::__:' :/  i: : : : :{              |: : : :.ヽ
   l/   |: : :!: : .l: :|            \: : : l´r. Y   {: : : : :丶_______.ノ: : : : : :}
      l: : :l: : :ト、|         、___,ィ ヽ: :| ゝ ノ    '.: : : : : : : : : : : : : : : : : : : : : : /
      |: : :ト、: |: :ヽ ___,彡     ´ ̄´   ヽl-‐'     \: : : : : : : : : : : : : : : : : : イ
        !: :从ヽ!ヽ.ハ=≠' , ///// ///u /           ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      V  ヽ|    }///  r‐'⌒ヽ  イ〉、
              ヽ、______ー‐‐' ィ´ /:/:7rt‐---、       こ、これは>>1乙じゃなくて
                  ィ幵ノ ./:/:./:.! !: : : : :!`ヽ     ポニーテールなんだから
              r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\   変な勘違いしないでよね!
               /: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\


8:デフォルトの名無しさん
09/09/08 19:40:24
>>1乙じゃない。もう建てなくていいスレ

9:デフォルトの名無しさん
09/09/08 22:10:55
乙一

10:デフォルトの名無しさん
09/09/09 01:00:48
実践 Haskell (real world haskell 和訳本)

今月の予定らしいけどオライリーの近刊に出てないねー

11:デフォルトの名無しさん
09/09/12 16:14:07
質問していい?
以下のモナドのなかで、union は Ord a であるところの Set a にしか使えません、と怒られるんだが、どこで制約課したらいいの?

---------------------------------------------------------------------------
import qualified Data.Set as S

data Distribution a =
Dist { sample :: a, support :: (S.Set a), expectation :: ((a -> Double) -> Double) }

always :: a -> Distribution a
always x = Dist { sample = x, support = S.singleton x, expectation = \f -> f x }

newtype Probability a = Prob { runProbability :: Distribution a }

instance Monad Probability where

  p >>= f =

    let x = runProbability p in

    Prob $ Dist { sample = sample $ runProbability $ f (sample x),

             support = S.fold (\d -> S.union $ support (runProbability $ f d)) (S.empty) (support x),

             expectation = \g -> (expectation x) (\x -> (expectation (runProbability $ f x)) g) }

  return a = Prob $ always a

----------------------------------------------------------------------------
Could not deduce (Ord b) from the context ()
arising from a use of `S.union'
Possible fix:  add (Ord b) to the context of the type signature for `>>='

12:デフォルトの名無しさん
09/09/12 21:26:16
>>10

今月じゃないって聞いてるよ。
近刊に出てきてないのはそのせいじゃないの?


13:デフォルトの名無しさん
09/09/13 02:35:04
>>11
標準のモナドは要素の型に制約を掛けられない
逆に言うと、Probabilityは要素の型に制約があるのでMonadになっていない
だからどういう注釈をつけても無理

14:デフォルトの名無しさん
09/09/13 11:33:53
>>13
ありがとう
ってことはリフレクションつかって自分で union 関数つくるしかないってことですね

しかし

Prelude Data.Set Data.Typeable> typeOf (empty :: Set Int)
>Set Int

はいいとして

Prelude Data.Set Data.Typeable> typeOf (empty :: (Ord a) => Set a)
>Set ()

これは納得いかねぇ…

15:デフォルトの名無しさん
09/09/13 14:42:57
URLリンク(www.haskell.org)
これだな
プロンプトじゃなくてファイルに書けばこの規則は適用されないから、ちゃんと曖昧エラーになるはず

16:デフォルトの名無しさん
09/09/15 00:12:55
デアゴスティーニなんかが
「週間Haskellコンパイラ」
なんて出してくれたら面白いのに

17:デフォルトの名無しさん
09/09/15 19:32:23
付録なんだよ?

18:デフォルトの名無しさん
09/09/15 19:48:12
余り物の福袋

19:デフォルトの名無しさん
09/09/15 19:57:21
>>17
んなもんはライブラリの解説がついた小冊子や小さなポスターでいいだろ。
トイレに貼って覚えるんだ。



20:デフォルトの名無しさん
09/09/15 20:01:21
>>11
モナド構造わかってないけど、Distributionって超関数の意味?
ということは、Probabilityは確率測度ってこと?

21:デフォルトの名無しさん
09/09/17 14:35:02
Haskellでσ-集合体クラスを定義して下さい

22:デフォルトの名無しさん
09/09/19 13:45:46
「The haskell School of Expression」を読んでいて、172 ページで躓きました。
lifting というものの考え方がいまいちよく分かりません。
頭が混乱しています。

このページの例で言えば、lifting の考え方を使って
Picture でできる事を Animation でもできるようにしているんですよね。

では、先の章で定義した containsR 関数や containsS 関数は、
Resion から Shape への、あるいは Shape から Region への lifting ではないのですか。
Region できる contain の演算を Shape でもできるようにする、
あるいはその逆が実現されているような気がするのですが。

23:デフォルトの名無しさん
09/09/19 13:49:54
>>10
10月に出るみたいだね

Books: 新刊・近刊情報
URLリンク(www.oreilly.co.jp)

24:デフォルトの名無しさん
09/09/19 18:42:38
Programming in Haskell さ、作者さまのページ見ると

A Japanese version will be published around October 2009.

と、なってるよ。

第二次 haskell 本ブーム?


25:デフォルトの名無しさん
09/09/20 16:16:00
2冊でブームってのも悲しいな。

26:デフォルトの名無しさん
09/09/20 22:41:47
千里の途も一歩から

27:デフォルトの名無しさん
09/09/21 01:49:59
あれ、入門書が2冊あるから3冊目では?
あと岩波からもGofer本が出ていたから、それを入れると4冊目か

28:デフォルトの名無しさん
09/09/21 02:53:26
今年の十月に予定されてるのが二冊ってことでしょ。


29:デフォルトの名無しさん
09/09/21 03:14:22
あ、そういふことですたか。吊ってきます

30:デフォルトの名無しさん
09/09/21 03:43:44
4冊でブームってのも悲しいな。

31:デフォルトの名無しさん
09/09/21 12:12:54
Gofer本って、岩波講座ソフトウェア科学 4 のこと?

32:デフォルトの名無しさん
09/09/21 15:38:48
型 A に対して可能な演算と同類の演算を型 B に対してもできるようにする、
という事が既に Lifting になっているのでしょうか。

型 A に対して可能な演算と型 B に対して可能な同類の演算の名前が違っていても、
それは Lifting には変わりなく、ただ同じ名前の演算が定義されていた方が
より洗練された Lifting だということなのでしょうか。

33:デフォルトの名無しさん
09/09/22 09:08:38
lift,liftってよく聞くけど、なんかあるの?
普通出会わないだろ。liftMぐらいじゃね?
なんなのliftって?

34:デフォルトの名無しさん
09/09/22 09:11:41
処理系の設計に足をつっこむと
しょっぱなで出くわすのがlambda lifting

35:デフォルトの名無しさん
09/09/22 10:04:11
lambda liftなんてあるのか。
でもいまの話ってtype lift(型持ち上げ)の話だろ。

36:デフォルトの名無しさん
09/09/22 10:10:02
>>32
Payton JonesのImplementation of Functional Programming Languages
がどこかにpdfであったはず
13章を読むといいよ

37:デフォルトの名無しさん
09/09/22 10:13:04
>>32じゃなくて>>35だった

38:デフォルトの名無しさん
09/09/22 11:23:12
>>35
私が質問しているのは恐らく type lift の事だと思います。

もし type lift がどういうものか知っているのでしたら、
是非教えて頂きたいです。
172 ページを付近を飛ばしてとりあえず先に読み進んでみましたが、
やはり意味が分からず、内容が頭に入ってきません。
はっきりさせたいです。

39:デフォルトの名無しさん
09/09/22 23:39:45
なんかすげー面白そうだな

40:デフォルトの名無しさん
09/09/23 06:08:41
Liftingというコンセプトを理解したければ、
俺が知りたいのはtype liftingだ、lambda liftingなんて関係ない、
なんて言ってないで、関係あるものはさっさと読んだほうがいいぜ?

PJの説明はそう悪くないし。

41:デフォルトの名無しさん
09/09/23 07:33:17
>>38
あんまり参考にならないだろうけど、型持ち上げはゲーデル(もしくはPM)にはじまる。
不完全性定理の証明に出てくる。
定義としては、
ある論理式aと別の論理式bがあるとして、
bがaの型持ち上げであるとは、bの全ての型のタイプ数を同じ数だけ
増加させると、bがaになることを指す。

というもの。PMがベースなのでそのままは適用できないけど、liftMを
使ってほぼ同じだと思われることは一応出来る。
a -> b => [a] -> [b]
みたいなの。

実は、自分もおなじことずっと調べていて、情報が欲しい。
そっちでなんか分かったら教えてくれると嬉しいかも。>>36も読んでみる。

42:41
09/09/23 07:44:25
>a -> b => [a] -> [b]
じゃなかった。
a -> b -> (a,b) => [a] -> [b] -> [(a,b)]
だった。

タプルを作る関数を型持ち上げ=>直積を作る関数。
p x y = (x,y)
directProduct :: [a] -> [b] -> [(a,b)]
directProduct = liftM2 p

43:デフォルトの名無しさん
09/09/23 11:55:56
>>40
ちょっと待って、飛躍しないで欲しい。
lambda liftingなんて関係ないなんて一言も言ってないし思ってもない。
そもそも、type lift と lambda lifting の違いすら今は全く分からない。

ただ、>>35 の言い方から、lambda lift は今回の話には繋がらないのか、
と推測しただけです(あの言い方ならそう推測してもおかしくないと思うが)。

で、私も「Implementation of Functional Programming Languages」を落としたので、
読んでみます。

44:デフォルトの名無しさん
09/09/23 12:57:40
実際、全然関係ないぞ

45:デフォルトの名無しさん
09/09/23 20:51:05
>>44
そうなんですか。
でも、やっぱりよく分かんないので、
とりあえず紹介された文献を読んでます。

まだ2章5節なんですけど、これはおもしろいですね。
ここまででもすごく勉強になります。
以前「Lambda-Calculus and Combinators an Introduction」を読んでいて、
p34 の不動点定理のところで意味が分からず挫折していたのですが、
ようやく意味が分かり、思わぬ収穫です。

13章にはほど遠いので、
lifting の意味はまだ全く分かんないですけど。
おもしろい文献の紹介、ありがとうございます。

46:デフォルトの名無しさん
09/09/24 10:00:51
10年前にmonadと出会って以来、何千回と挫折してきた俺がついに悟った!

これは

単なる

イディオムだ


47:デフォルトの名無しさん
09/09/24 10:43:42
最中どう?どうもなか?最中どう?どうもなか?最中どう?どうもなか?最中ど
う?どうもなか?最中どう?どうもなか?最中どう?どうもなか?最中どう?ど
うもなか?最中どう?どうもなか?もなかどう?どうもなか?もなかどう?どう
もなか?もなかどう?どうもなか?もなかどう?どうもなか?もなかどう?どう
もなか?もなかどう?どうもなか?もなかどう?どうもなか?もなどどう?どう
もなど?もなかどう?どうもなか?もなかどう?どうもなか?もなかどう?どう
もなか?もなかどう?どうもなか?もなかどう?どうもなか?もなかどう?どう
もなか?もなかどう?どうもなか?最中どう?どうもなか?最中どう?どうもな
か?最中どう?どうもなか?最中どう?どうもなか?最中どう?どうもなか?最
中どう?どうもなか?最中どう?どうもなか?最中どう?どうもなか?最中どう?


48:デフォルトの名無しさん
09/09/24 14:13:51
WINDOWS VISTA 環境に以下を参考にghcを導入した。

URLリンク(d.hatena.ne.jp)
導入したEclipse SDKはVersion: 3.3.2
Eclips用のHaskell モジュールが最新のEclips 3.5に未対応な為
リンク先の
>> 5. Windw -> Preferences -> Functional Programming -> Haskell -> Compiler -> GHC compiler -> Browseボタンでインストールしたghcのコンパイラ選択。
に有るように、正確にGHCの場所を指定しなくても動作する
ただし、インタープリタGHCiの場所を認識しないので、ghcの場所は正確に指定し
インタープリタghciの接待タブでghcの場所設定を利用するにチェックを入れる。

Eclipsの日本語化はURLリンク(mergedoc.sourceforge.jp) を参考にどうぞ

少し疲れたw

49:デフォルトの名無しさん
09/09/24 16:19:33
>>32
元の構造は保たないと。
ファンクタなんで。

50:デフォルトの名無しさん
09/09/24 18:50:01
函手じゃなくて自然変換じゃないか。
一意に決定しないと使い物にならない。

51:デフォルトの名無しさん
09/09/24 19:34:22
函手って見ると
ハルヒの射手座の日を思いだす

理由はよくわからない

52:デフォルトの名無しさん
09/09/24 23:04:26
slashdotのコメント欄はわかってないヤツが多いな。
URLリンク(slashdot.jp)

こういう連中がいる会社は最悪だろうな。まさに老害。

53:デフォルトの名無しさん
09/09/24 23:21:28
どういう連中か目に浮かぶようだ

54:デフォルトの名無しさん
09/09/24 23:30:38
Agdaって今世界でもっとも難しい言語の1つだよね?
極めれば即仙人になれる難しさだよね?

俺写像定義するだけで投げたレベルだからあれだけど

55:デフォルトの名無しさん
09/09/24 23:33:40
ほんとか!ちょっとAgda勉強しにいってくる。

56:デフォルトの名無しさん
09/09/24 23:48:37
魔法使い卒業検定には使えますか?

57:デフォルトの名無しさん
09/09/24 23:49:59
卒業なんてない。
死ぬまで学徒。

58:デフォルトの名無しさん
09/09/26 11:46:48
real world agda が出てから勉強する!

59:デフォルトの名無しさん
09/09/26 12:49:36
>>54
別に難しくないじゃん。
数学系ならさほど障害は無いと思う。

60:デフォルトの名無しさん
09/09/26 13:00:42
>>54
Coqよりだいぶマシ

61:デフォルトの名無しさん
09/09/26 22:47:02
darcsからbzrに乗り換えるか悩む

62:デフォルトの名無しさん
09/09/26 22:55:22
darcsって正直Haskell製以外にメリットなくない?不安定でたまにプロセスが止まったり、パフォーマンスもあんまよくないし。
git/bzrメインに乗りかえたらすごい快適になった。Haskell製ってことで期待しすぎたのかもしれないが、
正直最近はdarcsなリポジトリみるとウンザリする。

63:デフォルトの名無しさん
09/09/27 00:51:45
darcs 2.0.2だと実行ファイル単品で動いてたからインストールとか楽だったんだけど、
それ以降の奴ってdllが増えててやだなぁと思って使ってない。

git/bzr使おうかなぁとか思ったりもするけどmsysやらなんやら周辺のファイルの多さが気に入らない。

64:デフォルトの名無しさん
09/09/29 17:11:53
All About Monadsの原文のページが
例のおねーちゃんに乗っ取られてる

sampou.orgにあるから別にいいんだけど
なかのひとがどうしているのか気になる

65:デフォルトの名無しさん
09/09/30 21:37:25
GHC-6.12.1からSystem.IOが内部エンコーディング<->ローカルエンコーディングと
改行コードの自動変換をするらしい。

URLリンク(ghcmutterings.wordpress.com)

66:デフォルトの名無しさん
09/10/04 00:50:12
Haskell のカーネルって基本的にLispと同じだよね?
ガベージコレクタがあって
8ビットCPUの時代Lispのインタープリタは4kbyteほどしかなかった気がする
Haskellのフロントはhaskellのカーネルに食わせるために単純な演算塊に展開してやると
で、Haskellの基本的部分はかなりコンパクトに実装できるのかな?と思った。

67:デフォルトの名無しさん
09/10/04 07:28:42
>>66
> Haskell のカーネルって基本的にLispと同じだよね?

違う

68:デフォルトの名無しさん
09/10/04 14:35:49
チューリング完(ry

69:デフォルトの名無しさん
09/10/04 18:57:28
URLリンク(haskell.g.hatena.ne.jp)

qsort[]=[]
qsort(x:xs)=qsort larger ++ [x]++ qsort smaller
where
smaller = [a|a<-xs,a <=x]
larger = [b|b<-xs,b>x]

What would be the effect of replacing <= by < in the definiton of qsort? Hint:consider the example qsort[2,2,3,1]
改変されたqsortをqsort'だと仮定する

qsort[2,2,3,1]=qsort [2,1] ++[2]++qsort [3]=(qsort[1]++[2]++qsort[])++[2]++(qsort[]++[3]++qsort[])
=((qsort[]++[1]++qsort[])++[2]++[])++[2]++([]++[3]++[])
=[]+[1]+[]+[2]+[]+[]+[2]+[]+[3]+[]=[1,2,2,3]

qsort'[2,2,3,1]=qsort [1] ++ [2] ++ qsort[3]=qsort[]++[1]++qsort[]++[2]++qsort[]++[3]++qsort[]
=[]++[1]++[]++[2]++[]++[3]++[]

つまり、同じ値が複数あるときは、ひとつを残して消えてしまう。
---------
で、値が消えないんだけど文意を取り違えているのかどうなんだろう
消える様に改変しろなのかな?
smaller = [a|a<-xs,a <=x]をsmaller = [a|a<-xs,a <x]すると消えるけど

70:デフォルトの名無しさん
09/10/04 19:14:47
>>69
「改変したらどうなるか?」ってのが問いで、「値が消える」が答え

What would be the effect of replacing <= by < in the definiton of qsort? Hint:consider the example qsort[2,2,3,1]
qsortの定義の中の<=を<に変えたとすると、何が起きるだろうか。ヒント qsort[2,2,3,1]という例で考えてみよ

71:デフォルトの名無しさん
09/10/04 19:15:16
晒しているのか、まじ質問なのか、判断できん。

前者なら死ね。
後者ならどんだけ自分に自信がないんだ。君はできる子だよ。

72:デフォルトの名無しさん
09/10/04 19:17:46
>>67
どう違うのか簡潔な説明が欲しいけど
”違う”の一言で終わりそうな感じなのであきらめます。

73:デフォルトの名無しさん
09/10/04 19:21:27
Lisp系の場合はほんのわずかな特殊なものを除いて、
インタープリタ込みの構造になってる。
そして動的型付け。


74:デフォルトの名無しさん
09/10/04 20:44:23
いや、元Lisperなんでスレ違いだがおもわず。
それSchemeじゃない?Lispだと大抵コンパイラ込みで、宣言型型付けだろ。


75:デフォルトの名無しさん
09/10/04 21:23:36
実装による。
しかし、コンパイラでもマクロ展開を考えたら実質的にはインタプリタみたいなものは入ってなきゃだめだろう。
(CommonLisp でも Scheme でも。)
型については CommonLisp では型宣言できるけど、最適化のヒントでしかない。
型に応じて言語が何かしてくれるということはぜんぜん無い。
まぁ、「Lisp系」ってのは幅が広いので、ひとまとめで語るのが無茶だよ。

76:デフォルトの名無しさん
09/10/04 22:21:30
> 型に応じて言語が何かしてくれるということはぜんぜん無い。
型が宣言できるなら実装がなにかしてくれるかもしれないのでは?

77:76
09/10/04 22:22:55
しまった、Haskellスレか。関数型言語スレかとおもった。ごめん無視して。

78:デフォルトの名無しさん
09/10/05 00:46:11
言葉足らずですまないです。
Haskellをインタープリタだけ実装した場合lispに似てるのかな思ったので
言語仕様上は短精度、倍精度実数とか文字列とかあるけど
中身はリストさえclassとして実装している面白そうな物だなとか

a (n+1) = n で
a 1 を実行すると 0
a 2 を実行すると 1
a 0 を実行するとエラーになって思わず仰け反ったり、油断ならね~

GHCのガベージコレクタは優秀とか言われているけどどうやっているのか興味が沸いたり
プログラムが関数の定義塊なのに、c系統のつもりで読んでパニック起こしたり
快感と言うかグッ来るものがある

79:デフォルトの名無しさん
09/10/05 00:50:57
やっぱりなにが言いたいのかよく分からない

80:デフォルトの名無しさん
09/10/05 01:04:25
>>78
Yhcのソースでも読んで見りゃいいんじゃない?
URLリンク(www.haskell.org)

81:デフォルトの名無しさん
09/10/05 06:18:40
>>74
Haskellとの比較だから、コンパイラあるのは違う点に入らない。
実行時に型宣言ないlambda式生成できるので、
動的型付け必須で、データをunboxing出来ない。

82:デフォルトの名無しさん
09/10/05 08:43:13
Implementing lazy functional languages on stock hardware: the Spineless Tagless G-machine でも読んだら?

83:デフォルトの名無しさん
09/10/05 09:34:34
実際は Lisp でも型宣言したら静的型付けと同じように、
その型に応じた演算がされるから SBCL とか結構速い

84:デフォルトの名無しさん
09/10/05 19:18:36
>>83 >>82を読め

85:デフォルトの名無しさん
09/10/05 21:44:42
>>82
ps落としてきたんだけど、gvでエラーになっちゃう

86:デフォルトの名無しさん
09/10/05 21:55:43
>>85
GhostScript を使って読むとか ps2pdf ってコマンドが同梱されているから pdf に変換するとかすればいいと思うよ

87:デフォルトの名無しさん
09/10/05 22:22:05
>>86


88:デフォルトの名無しさん
09/10/05 22:51:24
>>84
え、何で俺?

89:デフォルトの名無しさん
09/10/06 08:34:16
Lispの型宣言と違い、Haskellの型宣言は、Haskellで書かれたコード全てに
強く強制されるから、コンパイラは、型的に正しいコードしか存在しないことを
仮定してコード生成ができる。

90:デフォルトの名無しさん
09/10/06 12:32:51
構造化プログラミングのAlgol
オブジェクト指向プログラミングのSmalltalk
そして関数型プログラミングのHaskell

10年後くらいにはこんな感じの認識になってるんじゃないかと思う


91:デフォルトの名無しさん
09/10/06 12:33:48
そしてC++のポジションにはScalaが座っていると

92:デフォルトの名無しさん
09/10/06 13:08:14
C++のポジション → みんなから罵詈雑言を浴びせられ続ける……ってこと?

93:デフォルトの名無しさん
09/10/06 13:38:26
>>89
Lispは逆のアプローチじゃなかったかなあ
最適化に必要な型や仮定をプログラマが与える
コードが適切な振る舞いをすることは、型システムでなくてプログラマが保証する

94:デフォルトの名無しさん
09/10/06 19:48:53
オライリージャパン早くしろよ

95:デフォルトの名無しさん
09/10/06 20:19:23
RWH待ち遠しいな


96:デフォルトの名無しさん
09/10/06 21:02:30
kazuさんのブログ面白いよね

97:デフォルトの名無しさん
09/10/07 00:39:22
cabal-installってユーザ単位の環境の作成管理がデフォだったっけ?
前は普通に/usr/local以下を管理してくれたと思ったが

98:デフォルトの名無しさん
09/10/07 16:26:46
userとglobalでprefixが$HOMEと/usr/localでなんちゃら

99:デフォルトの名無しさん
09/10/07 19:47:44
URLリンク(shootout.alioth.debian.org)
なんか前よりhaskellのランクが落ちてるような。他が良くなったのか。

100:デフォルトの名無しさん
09/10/08 08:17:56
Haskellの.NET実装ってある?

IronHaskellとかH#みたいな。

101:デフォルトの名無しさん
09/10/08 09:32:21
Haskell.NETってのが…計画倒れ?
URLリンク(php.cin.ufpe.br)

102:デフォルトの名無しさん
09/10/09 12:10:57
F#「椅子はひとつよ♡」

103:デフォルトの名無しさん
09/10/09 16:00:31
F#はHaskellじゃないし

正格なんだっけ?

104:デフォルトの名無しさん
09/10/09 20:56:47
Programming in Haskellの翻訳はいつ出ますか?

105:デフォルトの名無しさん
09/10/09 21:46:22
どこからでるんだろね

106:デフォルトの名無しさん
09/10/10 16:41:29
URLリンク(shootout.alioth.debian.org)

Ocamlに圧倒的に負けてるね。とくに簡潔さで。
Haskellの記述力が弱いのか?

107:デフォルトの名無しさん
09/10/10 17:39:03
URLリンク(shootout.alioth.debian.org)

によると、source sizeで一番Ocamlに差をつけられているのがregex-dnaというプログラム

Haskell GHCのコード
URLリンク(shootout.alioth.debian.org)

Ocamlのコード
URLリンク(shootout.alioth.debian.org)

詳しい人解説プリーズ、と思ったらそもそもOcamlのコード動いてねえ!

108:デフォルトの名無しさん
09/10/10 18:06:07
>>106
人が何に対して、何を基準にして簡潔さを感じるか、の違いだと思う。

私が感じる簡潔さはあのグラフでは表現されない。
私には Haskell は Ocaml に対して簡潔さにおいて圧倒的に負けてるとは思えない。

109:デフォルトの名無しさん
09/10/10 18:23:59
くやしいのうwwwwwwwくやしいのうwwwwwwwww

110:デフォルトの名無しさん
09/10/10 20:10:15
>>107
ワロタw

オライリージャパンの近刊情報にRealWorldHaskellがあるけど
組み込みLinux~とかとちがって発売日不明だし、十月は無理くさいね
URLリンク(www.oreilly.co.jp)

111:デフォルトの名無しさん
09/10/10 20:55:55
関数言語系の日本語の本は誤字脱字とかミスがひどいのが多いから
きっとRWHもそれで必死に校正してるんだろうな

112:デフォルトの名無しさん
09/10/10 22:19:30
>>107

> Fatal error: exception Failure("Buffer.add: cannot grow buffer")

バッファオーバーフローみたいなもの?
N=500,000(オリジナルの1/10)では動くらしい
Ocamlはメモリマネジメントがあまりうまくないのかな

113:デフォルトの名無しさん
09/10/11 14:14:21
質問なのですが、型変換ってどうやったらいいのでしょうか?
Word8 -> Word みたいなことをやりたいのですが

114:デフォルトの名無しさん
09/10/11 14:42:59
fromIntegral :: (Integral a, Num b) => a -> b
fromIntegral = fromInteger . toInteger
でいいんじゃないか。

115:デフォルトの名無しさん
09/10/11 18:16:36
>>114
それでいけました
質問にお答え頂きありがとうございました

116:デフォルトの名無しさん
09/10/11 18:32:19
>>89
何かレベルの低い話っぽかったから見てなかったわ…

>型的に正しいコードしか存在しないことを
>仮定してコード生成ができる。

Lisp でも (declaim (optimize (safety 0) ... )) とかすれば、
型的に正しいコードしか存在しないことを仮定してコード
生成が出来るんだぜ。

117:デフォルトの名無しさん
09/10/11 18:36:27
それって正しい型宣言をするのはプログラマの責任で、型チェックはあっても処理系依存じゃん。
ミスがあったら実行時にエラーになっちゃう。Haskellのように安全かつ完全な型検査はできるわけじゃない。
そもそもスレ違い。

118:デフォルトの名無しさん
09/10/11 18:46:21
そりゃ、違う言語なんだから違う部分を探せば幾らでもあるさ。
そんなことを言って何が面白いのか知らんが。

119:デフォルトの名無しさん
09/10/12 16:22:01
>>118
いや、おまえは型検査がまるでわかっていない。

120:デフォルトの名無しさん
09/10/12 16:28:14
そうやって妄想するのは良いけど勝手に決めつけるなよ。
自分だけが知った気になってる奴が一番面倒くさいんだよな。

121:デフォルトの名無しさん
09/10/12 16:48:35
そもそも俺はこれ↓が間違いだと言ってるだけなんだがなあ。

>>81
>実行時に型宣言ないlambda式生成できるので、
>動的型付け必須で、データをunboxing出来ない。

Haskell のスレだが、Lisp について間違った認識をしている
人が居たから訂正したまでだよ。

122:デフォルトの名無しさん
09/10/12 16:55:52
>>121
言い訳はそれで終わりか?
学部の授業受けなおしたらどうだ?

123:デフォルトの名無しさん
09/10/12 16:59:25
どちらが正しいか俺にはわからんが、
>>121>>122なら>>121の方に分があるように見える。

>>122のように無意味な誹謗を始めたら負けだ。

124:デフォルトの名無しさん
09/10/12 16:59:34
そういう煽り切ったら勝ちみたいなのは下らないから止めた方が良いと思うぜ。
>>121に異論が無いなら終わりだよ。

125:デフォルトの名無しさん
09/10/12 17:00:24
あ、スマソ。>>124>>122向けです。

126:デフォルトの名無しさん
09/10/12 17:51:20
型安全に関する理解が浅いのを
話題を煽り論争にスリ替えようとしているのが
あまりにもミエミエで笑った!

127:デフォルトの名無しさん
09/10/12 18:16:07
そもそも、最適化した Lisp の型に関する安全性を主張している訳じゃないことを
理解できてないだけでしょう。

単に煽りたいだけなのはミエミエだけどなあ。煽ればレスが貰えるみたいな、
レス乞食は面倒くさいから勘弁ね。ずっと笑ってなよ。

128:デフォルトの名無しさん
09/10/12 18:25:03
λ < スレ違いはもうやめて

129:デフォルトの名無しさん
09/10/12 19:28:37
オライリージャパン早くしろよ!

130:デフォルトの名無しさん
09/10/12 19:34:44
6.12.1-rc1キター

131:デフォルトの名無しさん
09/10/14 22:18:00
realWorld、24日発売みたいですね。
で、Tシャツって4k以上だから、もう一冊買わないとダメなんですかね。
やるなー、オライリー

132:デフォルトの名無しさん
09/10/14 22:38:31
宣伝はやめください

133:デフォルトの名無しさん
09/10/15 04:48:08
>>131
ktkr


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch