[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 10:27 / Filesize : 244 KB / Number-of Response : 901
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【数学者】Haskellはクソ言語【オナニー】



1 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 01:34:05 ]
C/C++>>>>(越えられない壁)>>>Haskell

369 名前:初心者A mailto:sage [2006/10/24(火) 23:03:51 ]
モジュール・・・機能単位、交換可能な構成部分という意味の英単語(e-wordより)

なるほど。Javaでいうところのクラスみたいな感じか
import文もJavaといっしょだな
モジュール ≒ Javaのパッケージ
定義     ≒ Javaのクラス
関数     = Javaのメソッド


ここで疑問点が発生
下のような2行だけ書いたファイルでもOKのはずだけど
これはなんで module とか where とか 定義名 がいらないの?

foo x y = x + y
hoge = 2

370 名前:デフォルトの名無しさん mailto:sage [2006/10/24(火) 23:09:22 ]
>>369
>これはなんで module とか where とか 定義名 がいらないの?
module ... whereの部分は省略することができて、その場合
module Main(main) where
と書かれているとみなされる。
(main)という括弧書きは、モジュール中の定義のうち、mainだけを外部に公開する、
という意味。括弧書きがないときは、全ての定義が公開される。

371 名前:デフォルトの名無しさん mailto:sage [2006/10/24(火) 23:25:53 ]
デフォルトではprivate(不可視)にしてるということか

次2行目
qsort _ [] = []

これは qsort が 定義名 でいいのかな
_(アンダースコア) は 変数名っぽいけどそんなわけないよな
そして、 [ ] (配列) = [ ] (配列) 

???
わからない

372 名前:デフォルトの名無しさん mailto:sage [2006/10/24(火) 23:39:37 ]
>>371
[]は空リスト。
_は厳密には変数名じゃないけど、そう考えても大して問題はない。
この行では、_がqsortの第一引数、[]が第二引数になっている。

qsort _ [] = []

は、qsortの第二引数が空リストのとき、第一引数に関係なく、結果は空リストである、と読む。
ここで定義しようとしているqsortは、第一引数として比較関数、第二引数としてリストを取り、
ソートされたリストを返す関数だから、この行は、「空リストをどんな比較関数を使ってソートしても結果は空リスト」と
言っていることになる。

373 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 00:04:32 ]
比較関数っていうのがよくわかんない
Webで探したらこんな文章発見

>でも比較関数って何?って思いますよね。
>比較関数とは2つの引数を持ち、
>引数1が引数2より小さい場合は負の整数、
>同じ場合は0、
>引数1が引数2より大きい場合は正の整数を返します。

うーん・・・
 _ (アンダースコア)がどういう役割なのかな、この場合 _(アンダースコア)以外はダメ?

例えば -(ハイフン)とか、ふつうのアルファベットとか

374 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 00:20:58 ]
>>373
>比較関数っていうのがよくわかんない
ここでは、引数を二つとって、第一引数が第二引数より「小さい」ときのみTrue、
そうでなければFalseを返す関数の事。
普通の意味での大小関係にしたがってTrue/Falseを返す関数を比較関数として与えれば
qsortは昇順のソートをするし、逆に数値が大きいほど「小さい」と判断する
関数を与えればqsortは降順のソートをする。さらに、例えば引数の絶対値を比べる関数を
渡せば、絶対値が小さい順にソートすることができる。

> _ (アンダースコア)がどういう役割なのかな、この場合 _(アンダースコア)以外はダメ?
仮引数の名前なので、アルファベットからなる名前を好きにつけても良い。

qsort comparer [] = []

とか。ハイフンは演算子とみなされるのでだめ。

375 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 02:19:46 ]
お札もえいないのか

376 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 10:17:13 ]
お礼を期待して2chで書くのは不毛な行為だとオモタ。

377 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 12:05:22 ]
>>375
「お札萌え居ないのか」?
巫女萌えならここに居るが何か。



378 名前:初心者A mailto:sage [2006/10/26(木) 02:47:04 ]
昨日はねちゃってたよ
サンクス

また明日とかよろ

379 名前:デフォルトの名無しさん mailto:sage [2006/10/26(木) 02:59:00 ]
おれい?

380 名前: ◆XbPqxIJuLU mailto:sage [2006/12/02(土) 02:04:39 ]

        ∩___∩
        | ノ|||,,.ノ ヽ、,,ヽ
       /  ●   ● |  このスレは俺がもらうクマ
       |    ( _●_)  ミ  以後、「AAでHaskellのお勉強」クマ
      彡、  ,、、|∪| ,,,ノ   
      /   . ヽノ  ヽ
      |  _r'゚lニニニl]_ ____/l    
fニニニニllニニ|  \[ l===ニニl]}||||||||ll]}コl|====iニコ
|l_,,=-'''~  | \... ヽ'''ニ「_,,,l⌒l。__。_]三i三三iF
      | 〈,,/ヽ___)|ll [`ー'


381 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 02:06:38 ]

      ∩∩ ; とりあえずHelloWorld書いてみるクマ
      ;|ノ||`      ┬-‖
   __,/●●| __    | | ‖
   | ; |`(_●)/ ミ   . Y ‖
   | .彡|∪||、 , .|     |  ‖
  /:~ ̄ ̄ ̄ ̄:/.|    |  ‖
  ,|:::::.   .......::/>>    /  ‖
 /.:::::  .. ...::::::|'(/\_/  ‖
../:.:::    .. :.:::/.:/     /‖\
/.:::.   ....:::..:::/.:/
' ̄ ̄ ̄ ̄ ̄ _/
|_| ̄ ̄ ̄ ̄|_|


382 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 02:09:08 ]

main = putStrLn "Hello, World!"

   ∩___∩
   | ノ      ヽ
  /  ●   ● |   こうですか!?わかりません!
  |    ( _●_)  ミ
 彡、   |∪|  、`\
/ __  ヽノ /´>  )
(___)   / (_/
 |       /
 |  /\ \
 | /    )  )
 ∪    (  \
       \_)


383 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 02:10:28 ]

  できてんじゃねーかよ!
    .,. -──-、    __
   /. : : : : : : : : :\  〈〈〈〈 ヽ
  /.┛┗: : : : : : : : : :ヽ 〈⊃  ノ
. !.::┓┏,-…-…-ミ: ::', |   |       ∩___∩
 {::: : : : :i '⌒'  '⌒'i: : ::}ノ   !       | ノ --‐'  、_\
 {:: : : : : | ェェ  ェェ |: : :}   /   、   / ,_;:;:;ノ、  ● |
. { : : : : :|   ,.   |:: :;! / ,   ,,・_  |    ( _●_)  ミ
. ヾ: : :: :i r‐-ニ-┐| ::ノ/   , ’,∴ ・ ¨彡、   |∪|  ミ
   ゞイ! ヽ 二゙ノイゞ     、・∵ ’  /     ヽノ ̄ヽ
  / _ ` ー一'´ ̄/          /       /\ 〉
  (___)    /          /        /


384 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 02:25:44 ]
 
          ,..-──- 、
          /. : : : : : : : : : \      Haskellはmainアクションからはじまるようになっている
        /.: : : : : : : : : : : : : : ヽ
        .,!::: : : :,-…-…-ミ: : : : :',     決まりごとだから深く考えちゃダメさ
        {:: : : : :i '⌒'  '⌒' i: : : : :}     
        {:: : : : | ェェ  ェェ |: : : : :}      そうそう、Haskellは大文字と小文字を区別するよ
     .   { : : : :|   ,.、   |:: : : :;!      
        .ヾ: :: :i r‐-ニ-┐ | : : :ノ       MainでもMAINでもない、mainじゃないといけない
         ゞイ! ヽ 二゙ノ イゞ‐′
    ,.、-  ̄/  入.` ー一'´ |` ┬-、       クマくん わかるかい?
    /  ヽ. /    ト-` 、ノ- |  l  l  ヽ.
  /    ∨     l   |!  |   `> |  i
  /     |`二^>  l.  |  | <__,|  |
_|      |.|-<    \ i / ,イ____!/ \
  .|     {.|  ` - 、 ,.---ァ^! |    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l
__{   ___|└―ー/  ̄´ |ヽ |___ノ____________|
  }/ -= ヽ__ - 'ヽ   -‐ ,r'゙   l                  |
__f゙// ̄ ̄     _ -'     |_____ ,. -  ̄ \____|
  | |  -  ̄   /   |     _ | ̄ ̄ ̄ ̄ /       \  ̄|
___`\ __ /    _l - ̄  l___ /   , /     ヽi___.|
 ̄ ̄ ̄    |    _ 二 =〒  ̄  } ̄ /     l |      ! ̄ ̄|
_______l       -ヾ ̄  l/         l|       |___|


385 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 02:30:34 ]

                      _ /- イ、_
  簡単クマ   __        /: : : : : : : : : : : (
          〈〈〈〈 ヽ     /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ
          〈⊃  }     {:: : : :ノ --‐' 、_\: : ::}
   ∩___∩  |   |      {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::}  
   | ノ      ヽ !   !   、  l: :ノ /二―-、 |: ::ノ
  /  ●   ● |  /   ,,・_  | //   ̄7/ /::ノ
  |    ( _●_)  ミ/ , ’,∴ ・ ¨  〉(_二─-┘{/
 彡、   |∪|  /  、・∵ ’  /、//|  ̄ ̄ヽ
/ __  ヽノ /         /   // |//\ 〉
(___)   /         /    //   /\ /


386 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 02:32:43 ]
 
                                              _ /- イ、_
    ∩___∩   あぁたたたたたたたたたたたた  /: : : : : : : : : : : (
    | ノ     ヽ                             /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ
   /    ●   |     r‐っ'つ  _,rノ´)        {:: : : :ノ --‐' 、_\: : ::}
   |      ( _●) ーニ三、_,Eノ‐_r'           {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::}
  彡、     |∪||   r'´)  ̄-一ーt_j'´     、   l: :ノ /二―-、 |: ::ノ
    ゝ     ヽノ _三  'ー'´)   _,∩     ,,・_    | //   ̄7/ /::ノ
   /    ー-−ニ ̄‐ヽ   ̄,_)' 一(´,__) `! , ’,∴ ・  ¨  〉(_二─-┘{/
          一 - ―゙ゝ_,.)  ニ(__,.)-''l-‐、・∵ ’    /、//|  ̄ ̄ヽ
                 一‐--(_) ノ`       /   // |//\ 〉
                      (__)'         /    //   /\ /
   putStrLnってなんだクマ?


387 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 02:34:04 ]

      関数名だボケ!!

       ,..||-ノ─ソ彡〈〈〈〈 ヽ
     &. : : : : : : : : : ミ〈⊃  }
    ミ.: : : : : : : : : : : : : :  |   |
    ,!::: : : :,-…-…-ミ: : : :|   |         ∩___∩
   三 : : : :i ;;;/:'  '⌒' i: : : |   |        | ノ --‐'  、_\ 
   .{:: : : : |:::+;;;  ェェ .|: : : : ニ  !   ,,・,_  / ,_;:;:;ノ、  ● |
    { : : : :|ヾ  ,.、   |:: : : :; ! / ’,∴ ・ ¨ |    ( _●_)  ミ
 / ヾ: :: :i r‐- ┃┐.| : : :ノ/、・∵ ’    彡、   |∪|   ミ
/ __ゞイ!ヽ┃ニ゙ノ イゞ‐            /     ヽノ ̄ヽ
(___)     /`'            /       /\ 〉




388 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 02:35:05 ]

             .,..-──- 、
           r '´. : : : : : : : : : :ヽ
          /.: : : : : : : : : : : : : :: ヽ
         ,!::: : : : : ,-…-…-ミ:: : :',
         {:: : : : : :i  ,;ノ;´:`ゞ、i: : :.:}  もともと用意されてんだよ〜っ!!
         {:: : : : : :|  ェェ;;;;;;;ェェ|: : : } 
         { : : : : ::|    ,.、 .| : : :;!∫ 
          ヾ: :: : :i   r‐-ニ┐| : riii= 
           ゞイ!   ヽ 二゙ノ イ「 ノ 
          (⌒ ー ̄ ̄´ r⌒ !  〉
           ヽ弋パラッパッパ` ー'
           〔勿\     ヽ        ベキ
               )  r⌒丶)  ベキ
     ドカ   ドカ  /   !   |' ∩__∩   ボキ
       ドカ    /   /|  l| ノ --‐'  、_\
             (    く  ! ~l / ,_;:;:;ノ、  ●| 
           ドカ   \  i   | ‖彡    ( _●_) ミ
            ,__>  ヽヽ从/ 彡 、  |∪|  ミ
            ⊂ _ ⌒ヽ从  ⊃  ヽノ ̄⊃


389 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 02:43:42 ]
;;;;;;;;;;;;;;;;;;;;;(:::::::::::::::::::::::::::::::   ,...ヾ ;;\::           ::l;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;/
;;;;;;;;;;;;;;;;;;;;;;;;;ー-..::::ミミミ、ヾ   ( );;) ヾ;;ヽ、           :i;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;://
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=-゙-`:::::::ミミ\ ゙゚''" i::ヽ;;i  ::         |;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:l /
;;;;;;;;;;;;;;;;;;;;;;;/:::::::    :::::::.ミ::.'ヽ.........::::::::.、'_ノ        l;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:i /
;;;;;;;;;;;;;;;;;,ノ:::::::::::.             :::.`   , 二;ニ= 、   ノ;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:ノ /
;;;;;;ー-'',:::::::::::::::              :::  ' ,rェ ヽ`  ヽ /;:;:;:;:;:;:;:;:;:;:;:;:;:// /
;;;;;;;;;;;;/"::::::::::               _i ヽ゚ ン i` /;:;:;:;:;:;:;:;:;:;:;:;:;:ノ / /
ー' ̄:::::::::::::::::     ____    /:;:;:ヽ ー  /;:;:;:;:;:;:;:;:;:;:;:;:;:// / /
:::/:::::::::::::::::::::    /;:;:;;:;:;:;:;:;:;:;:;:;:ヽ、 :;ー:ノミ; ::. /;:;:;:;:;:;:;:ー" ̄ / / / /
:/::::::::::::::::::::::::  /;:;:;/:::::::::::\ \;ヽ/ ̄   : /;:;:;:;:;/"/ / / / / /
:::::::::::::::;;::::::::::::  |:;:;:;:;:l ̄\:::::::::::\ );:ヽ    /;:;:;:;:;:;l/ / /  |\/\/ヽ∧
::::::::::::::::::;;;::::::::.  \:;:;ヽ  ヽ:::::::::::::'/;:;:/    /;:;:;:;:;:;:丿/ / _/ ハ  あ
::::::::::::::::::::;;;;::::::    \;:;\  |:::::::/;/   /;:;:;:.:_,- " / /\    ス  ら
::::::::::::::::::::::;;;;;;:::    、. \;:;\ l::/;/   / ̄/ / /  /    ケ   い
:::::::::::::::::::::::::;;;;;;;;../ ̄ ー\ ;:;:;:/   // /  / /<       ル   ぐ
::::::::::::::::::::::::::::;;/      ゙''ー 、_ /  / / / / /       !!!   ま

390 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 02:46:09 ]

                         _ /- イ、_
               ,       /: : : : : : : : : : : (
   意味わからんわw  ゚ + `    /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ
            ’, ’,∴ ・ ¨ {:: : : :  : : ::;:;: ;: ;:;: ;: ::}
   ∩___∩     ii  ’,∴  ェェ ( : : : ::;:;: ;: ;:;: ; : ::::} 
   |      : : ;: ヽ  ! | | ! ,・,,  (_l__\(: ::;:;: ;ヽ: ; : ::ノ
  /      : : ;: |く^⌒!|| , ,,・_(_ヽ;:;:)ヽ: ::;:;: ;:; ::ノ
  |       : : ::;:ミ ::;:| !   ∴ ・ ¨C〉 (_二:;: ;::;:/
 彡、     : : ::;:/⌒ ノ||!、 ’  ・∵ (、//|    ̄ヽ
/ /       : : ::;:/!!       /   // |//\ 〉
(_/     : : ::;:/'' ̄         /    //   /


391 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 02:50:48 ]


           バカ専用      普通  ハッカー ウィザード
             ┝ - - - - ┿━━━┿━━━┥
   ∩___∩   /)
   | ノ      ヽ  ( i )))
  /  ●   ● | / /
  |    ( _●_)  |ノ /   今はここら辺クマーー!!
 彡、   |∪|    ,/
/    ヽノ   /


392 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 02:52:26 ]

                   ∩─ー、
                 / ● 、_ `ヽ
                /  ( ●  ● |つ
                |  /(入__ノ   ミ そろそろモナドでもはじめるか・・・
                 、 (_/   ノ
                 \___ノ゙
                 / 丶' ⌒ヽ:::
                / ヽ    / /:::
               / /へ ヘ/ /:::
               / \ ヾミ  /|:::
              (__/| \___ノ/:::
                 /    /:::
                 / y   ):::
                / /  /:::
               /  /::::
              /  /:::::
             (  く::::::::
              |\  ヽ:::::
                |  .|\ \ :::::
          \    .|  .i::: \ ⌒i::
          \   | /::::   ヽ 〈::
              \ | i::::::   (__ノ:
              __ノ  ):::::
            (_,,/\


393 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 02:53:10 ]
    
      まだはえーーよ!
        .,..-──- 、
      r '´. : : : : : : : : : :ヽ
     /.: : : : : : : : : : : : : :: ヽ
    ,!::: : : : : ,-…-…-ミ:: : :',..  _
    {:: : : : : :i  ,;ノ;´:`ゞ、i: : :.:} / /  _____ 
    {:: : : : : :|  ェェ;;;;;;;ェェ|: : : } ./ /  /// \\ ./\ ∩___∩
    { : : : : ::|    ,.、 .| : : :;!./  \  ̄     ̄/./  | ノ --‐'  、_\
     ヾ: :: : :i   r‐-ニ┐| : r / /"\.>   .__/./   / ,_;:;:ノ、  ● |
      ゞイ!   ヽ 二゙ノ イ /__/       <__/     |    ( _●_) ミ
    /⌒  `ー―''´ヽ             \_ ~\彡、   |∪|  ミ
  /           |        //    \_/     ヽノ  ̄\
 (   く"| _____|____,,___ /   ̄Z、   /,,,,,,,,      /ヽ >
  \  ヽノ _|||||_____.爪_|―――゚'ヽ     >  ;;;'''''';;;';';;   / <_/ 
 r' ̄\_ 三〉)) ̄ ||||`ー'       `-、ゝ ̄  ;;'''    ∴。・、
 )__/. ̄ ̄   ||||           \    '':;:;,,,;;;'''`・゚。;;


394 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 02:59:51 ]

              -― ̄ ̄ ` ―--  _        
          , ´         ,    ~  ̄、"ー 、 
        _/          / ,r    _   ヽ ノ
       , ´           / /    ●   i"
    ,/   ,|           / / _i⌒ l| i  |
   と,-‐ ´ ̄          / / (⊂ ● j'__   |
  (´__   、       / /    ̄!,__,u●   |   モナドって言っただけで撃つことないじゃん
       ̄ ̄`ヾ_     し       u l| i /ヽ、  ちょっと調子にのっただけなのに・・・
          ,_  \           ノ(`'__ノ
        (__  ̄~" __ , --‐一~⊂  ⊃_
           ̄ ̄ ̄      ⊂ ̄    __⊃
                   ⊂_____⊃


395 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 03:11:55 ]

|
|.-──-、
| : : : : : : : : \
|: : : : : : : : : : : ヽ    次の問題は length関数だ
|-…-…-ミ: : : : :',
| '⌒'  '⌒' i: : : : :}    length [1, 2, 3, 4, 5, 6, 7]
| ェェ  ェェ |: : : : :}    length ["abc", "AAA", "クマ"]
|   ,.、   |:: : : :;!    length [ ""]
| r‐-ニ-┐| : : :ノ     length "ヌケドナルド"
|! ヽ 二゙ノ イゞ‐′     length "kuma"
| ` ー一'´丿 \
| \___/   /`丶、
| /~ト、   /    l \


396 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 03:14:55 ]

               ,..-──- 、
             /. : : : : : : : : : \
            /.: : : : : : : : : : : : : : ヽ     length関数は要素の数を返す!
           ,!::: : : :,-…-…-ミ: : : : :',     関数の右にあるのが引数だ
           {:: : : : :i '⌒'  '⌒' i: : : : :}     どんな値でも長さを調べられるぜ
           {:: : : : | ェェ  ェェ | : : : : :}     さぁ答えろ! 間違えたら殺す!!
           { : : : :|   ,.、  .| :: : : :;!
_∧        ヾ: :: :i r‐-ニ-┐ | : : :ノ        ∧
(   \       ゞイ! ヽ 二゙ノ イゞ‐ ′     //~⌒ヽ
|( ● )| i\     _,,ノ| ` ー一'´//\     /i |( ● )|
\_ノ ^i | _,,..r''''" ノ | \`', /  /  / ̄`''ー | i^ ゝ_ノ
 |_|,-''iつl/´    ヽノ| /\   / 、│     l⊂i''-,|_|
  [__|_|/〉ヽ、  / |/ );;;;/\/   'く    /〈\|_|__]
   [ニニ〉  ',  ヽ. | /⌒| /   ゚/    / 〈二二]
   └―'                        '─┘


397 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 03:18:17 ]

                   ∩─ー、
                 / ● 、_ `ヽ
                /  ( ●  ● |つ
                |  /(入__ノ   ミ 上から・・・
                 、 (_/   ノ
                 \___ノ゙     7
                 / 丶' ⌒ヽ:::     7
                / ヽ    / /:::     0
               / /へ ヘ/ /:::     1
               / \ ヾミ  /|:::     1
              (__/| \___ノ/:::
                 /    /:::
                 / y   ):::
                / /  /:::
               /  /::::
              /  /:::::
             (  く::::::::
              |\  ヽ:::::
                |  .|\ \ :::::
          \    .|  .i::: \ ⌒i::
          \   | /::::   ヽ 〈::
              \ | i::::::   (__ノ:
              __ノ  ):::::
            (_,,/\




398 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 03:18:55 ]

       ちげーーよ!!
        .,..-──- 、
      r '´. : : : : : : : : : :ヽ
     /.: : : : : : : : : : : : : :: ヽ
    ,!::: : : : : ,-…-…-ミ:: : :',..  _
    {:: : : : : :i  ,;ノ;´:`ゞ、i: : :.:} / /  _____ 
    {:: : : : : :|  ェェ;;;;;;;ェェ|: : : } ./ /  /// \\ ./\ ∩___∩
    { : : : : ::|    ,.、 .| : : :;!./  \  ̄     ̄/./  | ノ --‐'  、_\
     ヾ: :: : :i   r‐-ニ┐| : r / /"\.>   .__/./   / ,_;:;:ノ、  ● |
      ゞイ!   ヽ 二゙ノ イ /__/       <__/     |    ( _●_) ミ
    /⌒  `ー―''´ヽ             \_ ~\彡、   |∪|  ミ
  /           |        //    \_/     ヽノ  ̄\
 (   く"| _____|____,,___ /   ̄Z、   /,,,,,,,,      /ヽ >
  \  ヽノ _|||||_____.爪_|―――゚'ヽ     >  ;;;'''''';;;';';;   / <_/ 
 r' ̄\_ 三〉)) ̄ ||||`ー'       `-、ゝ ̄  ;;'''    ∴。・、
 )__/. ̄ ̄   ||||           \    '':;:;,,,;;;'''`・゚。;;



399 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 03:26:35 ]
                   /. : : : : : : : : : \
                  /.: : : : : : : : : : : : : : ヽ
 そんなバカなクマ     ,!::: : : :,-…-…-ミ: : : : :',
                {:: : : : :i'⌒'  '⌒' i: : : : :}
         ∩___∩ {:: : : : | ェェ  ェェ  |: : : : :}
        | ノ --‐'  、_\: : : :|  ,.、    |:: : : :;!
        / ,_;:;:;ノ、  ●ヾ: :: :i r‐-ニ-┐ | : : :ノ  上の3つは
       |    ( _●_)  ミゞイ! ヽ二゙ノ イゞ‐′   リスト(配列)だから正解!!
         彡、   |∪|  ミ  ⌒゛ /⌒ヽ\
     /⌒    ヽノ`''/ ⌒ ー--、' ,/`/
     / /~〔_彡.ミ⌒ヽー,==-、 ヽ_,zn'  /
    | | /    `^,/  ̄,ノ   ヽ、__^ノ /
    彡ノ |      /⌒ヽ i⌒ ー 、  ヽ
       ヽ     l人  |  .)  `  . |ー┐
        \    `⌒ |  ノヽ、_   ノ.ヽ」

             /. : : : : : : : : : \
           /.: : : : : : : : : : : : : : ヽ
           ,!::: : : :,-…-…-ミ: : : : :',
          {:: : : : :i '⌒'  '⌒' i: : : : :}
          {:: : : : | ェェ  ェェ |: : : : :}   でも下の2つは
          { : : : :|   ,.、   |:: : : :;!     ただの文字列!
           ヾ: :: :i r‐-ニ-┐| : : :ノ     
             ,,,! ヽ二゙ノ イゞ‐′     こういう場合は文字数を
 ひっかけクマ・・・ /      ̄⌒ヽ         数えるんだろーがぁぁ!!
            |      lヽ、 | __
     ∩___∩      L__| |_. `ヽ
     | ノ --‐'  、_\        lヽ‐'〉 .|
     / ,_;:;:;ノ、  ●ヾ     _ \/  .|
    |    ( _●_)  ミ ー-`\  \,,ノギリギリ
     彡、   |∪|  ミ.      `ヽ   )
     彡    ヽノ/      ,//  /

400 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 03:30:11 ]
             ,、__
            /ヽ   ``ヽ
           // ̄' ̄ ̄ヽ.\
           `i |,_, ,_,、 i .>
           ト|,:ニ/ヽ二|'ー!イ.   やはり所詮はクマ
            | ̄,.レ,..、  )7
            ! ''===i  /'.    ヌケドを殺るのはワシしかおらんな
            ヽ `! !' ,//\_
         _,―イ>`'´‐< /  \_
       _/ _/  /`―「_!―'./  /   `―::、
      _/ |i   |  ///' /  !_      \
  ._∧ノ  | i  i'  ! | | /  ・'/ i'    イi
 /   \| |  |  | | | /  _∧=i |     /|
 |( ● )| i\| i  | | | レ'/   \|       |
 \_ノ ^i || ヽ  | フ |( ● )| i\|     ノ
  |_|,-''iつl|  \/ /\_ノ ^i | ,‐、」  !|
    [ニニ〉|  / /  |_|,-''iつl \\\|
    └―'./ / /    [__|_|/〉  ) ヽ ! |
    \_/ //      [ニニ〉//  ! | 」
       |  |        └―'V | |_,,..::‐''´


401 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 03:33:18 ]
                                    ,..-──- 、
                         /. : : : : : : : : : \
                        /.: : : : : : : : : : : : : : ヽ
       __,、           ≡   ,!::: : : :,-…-…-ミ: : : : :',     バカめ
    〃ニ;;::`lヽ,,_          ≡ {:: : : : :i '⌒'  '⌒' i: : : : :}     ジジイの命もこれまでだ
    〈 (lll!! テ-;;;;゙fn    __,,--、_  .. {:: : : : | ェェ  ェェ |: : : : :}  ≡
   /ヽ-〃;;;;;;;llllll7,,__/"  \三=ー"{ : : : :|   ,.、   |:: : : :;!  ≡
   >、/:::/<;;;lllメ   \ヾ、  ヽTf=ヽ` : :: :i r‐-ニ-┐ | : : :ノ
  j,, ヾて)r=- | ヾ:   :ヽ;;:     | l |  l ゞイ! ヽ 二゙ノ イゞ‐′   ≡
 ,イ ヽ二)l(_,>" l|    ::\;::    | |  |  ヽ,,` ー一'/ V
 i、ヽ--イll"/ ,, ,//,,    :;;   l //  l く> /::l"'i::lll1-=:::: ̄\
 ヾ==:"::^::;;:::/;;;;;;;;;:::::::::::::: :::::ゞ ノ/   L/〈:::t_イ::/ll|─-== ヾ
  \__::::::::/::::::::::::_;;;;;;;;;;;;;;;;;ノノ   ヘ   >(゙ )l:::l-┴ヾ、ヽ  )
      ̄~~ ̄ ̄/ :::|T==--:::::  //  / ト=-|:|-─ ( l   /
         / ::  ::l l::::::::::::::::::/ /:::::::::::/:::::(ヽ--─  / |  /
         ヽ_=--"⌒ ゙゙̄ヾ:/ /:::::::/:::::::::`<==-- ノ / /
         /   /   \/::::::::::::::::::::::::::::: ̄'''"":://
        /   /     :::: ヾ::::::::::::::::::::::::::::べ__;;;--"


402 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 03:33:59 ]
        __ ,、
      /''    /ヽ.
     / /' ̄ ̄ ̄ ヽヽ/ ̄)
    <. i  ,_, ,_,|. i' |     くニ} {fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj
     ト,!ー|二/'ヽニ:,|イ. |
      (   ,..J,、 ̄||  |   バカモン! 遅延評価の威力を見せてくれるわ!
     .'ヽ  i==='' !   |
       ヽ, `! !'/    |
 くニ} {fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj
      /  ,へ        ̄ ̄`ヽ
       /  /  \    t──┐  |
     (__/     >   ).   |  |_
              /  /   (___)
            (  \
             \__)


403 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 03:34:40 ]
        __ ,、
      /''    /ヽ.
     / /' ̄ ̄ ̄ ヽヽ/ ̄)
くニ} {f<. i  ,_,({fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj
     ト,!ー|二/'ヽニ:,|イ. |
      (   ,..J,、 ̄||  |   ・・・・・・
     .'ヽ  i==='' !   |
       ヽ, `! !'/    |
 くニ} {fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj
      /  ,へ        ̄ ̄`ヽ
       /  /  \    t──┐  |
     (__/     >   ).   |  |_
              /  /   (___)
            (  \
             \__)


404 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 03:48:22 ]

           バカ専用      普通  ハッカー ウィザード
             ┝ - - - - ┿━━━┿━━━┥
   ∩___∩   /)
   | ノ      ヽ  ( i )))
  /  ●   ● | / /
  |    ( _●_)  |ノ /   まだここら辺クマーー!!
 彡、   |∪|    ,/
/    ヽノ   /


405 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 13:34:53 ]
>>396,397,399
length [""]
は、空文字列をひとつ含む配列なんだから
1
だよ。

406 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 13:59:22 ]

       //                   |  |      ,イ
      //                    l  |     //
    //        ∩___∩        /  ||ノノ_/ /
   /'"         | ノ      ヽ     /        /
  /         ,/./  ●   ● |    /  ;/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
            ,. ‐'" |:|    ( _●_)  ミ   / ,< 間違えてんじゃねーかよ!!
       , ィ'"    |:::彡  |∪|  /   , '    \___________
     ,.イ        |:::::::L  ヽノ,,,,ノ  .//´ ̄ ̄`ヽ       \
   //i|      ,.|::::::レ! /:::::/ //        \ ( ̄`ヽ、 \
  ./:::::{ |ヽ   |ヽ∠.|::::::| メ:::::::; '_/// /`''"⌒i  ,.....,_  \、   `ヽ、\
   `''" `'''`ー-|'"  ,':::::::|':::::::; ' / /  ヾ-┤ |'´,. --.、`丶、\     `\
        ノ   {::::::/:::::::/__ノ ∠/  / _ /- イ、_  ヽ  ヽ
       /   ノ/⌒ヽ::::}   /   /: : : : : : : : : : : (' ,ノ,ハ   ガッ
     <    {ム/   }/  ∠/ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ  |  ヽ
       `ヽ、  'ー'-'‐'′  /   {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::}  !`'ー─ゝ、    _
         ヽ       /     l: :ノ /二―-、 |: ::ノ /  _  `丶..ノF'!
          ヽ-‐''" ̄``ヽ       | //   ̄7/ /::ノ ̄ヽ ̄  `i丶、__,.ノ
                          ヾ(_二─-┘{/    ヽ、_   }ヽ、
                             ̄ ̄         ``'"ー-


407 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 21:51:40 ]
length ["abc", "AAA", "クマ"] は 7 じゃなくて 3 だろ!



408 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 22:57:35 ]
                                        | | | |
                         _ /- イ、_      |_|_|_|_
    バカ野郎!             /: : : : : : : : : : : (    / 〉〉〉〉  カスが!
              l⌒)OOo    /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ  {  ⊂〉
   ∩___∩    {  )  )    {:: : : :ノ --‐' 、_\: : ::}  |   |  ∩___∩
   | ノ      ヽ  | ::::::/     {:: : :ノ ,_;:;:;ノ ////ヾ: :::}  l   l /      ヽ |
  /  ●   ● |  /  ::::|   、  l: :ノ /二―-、 |: ::ノ  ヽ  | ●   ●  ヽ
  |    ( _●_)  ミ/    )  ,,・_  | //   ̄7/ /::ノ .・,,; \彡 (_●_ )    |
 彡、   |∪|   /   / ̄, ’,∴ ・ ¨   〉(_二─-┘{/ ∴ ;・, ;  \  |∪|    ミ
/ __  ヽノ  /   /  、・∵ ’   /、//|  ̄ ̄ヽ  、;:,・    ヽ. ヽノ___ ヽ
(___)    /    /        /   // |//\ 〉         ヽ (_____)


409 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 22:58:52 ]

                      うるせーばか!
               __       /- イ、_
  ∩___∩     /  〉〉〉〉 /: : : : : : : : : : : (
 /_ノ  `ー- ゝ\   、 {   ⊂〉/: : : : ::;:;: ;: ;:;: ; : : : ::ゝ〈〈〈〈  ヽ      ∩___∩
 | ●  ゝ:;;;:;:_, ヽ , ,・_ |    {:: : : :ノ --‐' 、_\: : ::}〈⊃   }      | ノ --‐'  、_\
彡   (_●_ ) ''  |, ’ ,∴ l    {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::}  |    |    、 / ,_;;;:;ノ、  ● |
彡、   |∪|    ミ、・∵ ’ ヽ    l: :ノ /二―-、 |: ::ノ     !  ,,・_  |    ( _●_) ミ
γ ̄  ヽノ   ヽ)       \    | //   ̄7/ /::ノ    / , ’,∴ ・¨彡、    |∪|  ミ
〈 /i          i         \ 〉(_二─-┘{/  / 、・∵ ’  /      ヽノ ̄ヽ
  ノ        ノ          ヽ 、//|  ̄   /´       /        /\ 〉


410 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 23:07:38 ]
>>395
【問題】
length [1, 2, 3, 4, 5, 6, 7]
length ["abc", "AAA", "クマ"]
length [ ""]
length "ヌケドナルド"
length "kuma"

【答え】
7
3
1
6
4  ∩___∩
   | ノ      ヽ
  /  ●   ● | クマクマ
  |    ( _●_)  ミ
 彡、   |∪|  、`\
/ __  ヽノ /´>  )
(___)f^f^f^f^f^f^f^f^f^-┐
 |    |~ ~ ~ ~ ~ ~ ~ ~ ~ │
 |    | 配列は要素数 │
 |  / | 文字列は文字数|
 | /  | 正直すまんクマ |
 ∪   |_____________|
        \_)


411 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 01:33:32 ]
. ┌────────────────────┐
つ |   文字列     =      文字のリスト      │
. |   "kuma"   .→     ['k', 'u', 'm', 'a']      |
. | "ヌケドナルド" →  ['ヌ', 'ケ', 'ド', 'ナ', 'ル', 'ド'] .|
. └────────────────────┘

つ [] == ""

412 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 02:50:45 ]
正確には

[] :: [Char] だな

413 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 19:26:12 ]
Ctrl-Dを押すまで結果が出力されないんだが・・・。
mapMを使ってるせいだろうか。

main = do cs <- getContents
     r <- mapM hoge $ lines cs
     putStr $ head r

hoge :: String -> IO String
hoge x = return x

414 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 21:26:50 ]
>>413
その通り。
csの終端を見つけるまでmapM_が終わらないから、
putStrが実行されることもない。

415 名前:414 mailto:sage [2006/12/03(日) 21:27:23 ]
ごめん。mapM_じゃなくてmapMね。

416 名前:413 mailto:sage [2006/12/03(日) 23:45:53 ]
>>414,415
なるほど。ありがとう。
一行入力するごとに結果を返してほしいのだが、いい方法はないのかな。
mapMはsequence . mapらしいので、いろいろ組み合わせて書き直してみた。

main = do cs <- getContents
     mapM_ (putStr . unlines =<<) $ map sequence $ map (:[]) $ map hoge $ lines cs

hoge :: String -> IO String
hoge x = return x

こうすれば望みの結果が得られるようなのだが、ちょっとめんどくさすぎるな・・・(・∀・;)

417 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 00:29:46 ]
>>416
IOは上から順に実行されるのが原則(getContentsは例外)で、
評価と違って「値の要求があって初めて」実行したりはしない。
だから
r <- mapM hoge $ lines cs
とあったら、rが必要とされるか否かにかかわらずmapMは最後まで実行される。
これは、そうでないと動作の順序を予測するのが難しくなって不便だからだ。
どうしてもその挙動が必要なら、unsafeInterleaveIOという関数を使えば実現できる。

ちなみにそのコードは行ごとにputStrしているだけで、
mapM_ putStrLn $ lines cs
と書いているのとかわらない。
何がしたいかをもう少し詳しく教えてくれたら、もうちょっとまともな助言ができると思う。



418 名前:413 mailto:sage [2006/12/04(月) 01:51:46 ]
>>417
>評価と違って「値の要求があって初めて」実行したりはしない。
>だから
>r <- mapM hoge $ lines cs
>とあったら、rが必要とされるか否かにかかわらずmapMは最後まで実行される。

あぁ、なるほど。なんでうまくいかなかったのか、やっとすっきりした。
結果が必要かどうか関係ないのね・・・。
自分が作りたかったのは、ハッシュテーブルに入力されたものを入れて、そのときのハッシュテーブルの中身を返すという関数。
↓こんな感じなのを作ったのだが、入力が終わらないと処理が先に進まなくて困ってる次第。

import Data.HashTable as HashTable

main = do cs <- getContents
     hash <- new (==) hashString
     r <- mapM (hoge hash) $ lines cs
     putStr $ unlines r

hoge :: (HashTable String Int) -> String -> IO String
hoge _ [] = return []
hoge hash key = do insert hash key 1
          h <- toList hash
          return $ show h

419 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 03:03:58 ]
>>418
それと同じことをするだけなら、mapMでハッシュ表の操作と同時に出力もすれば良い。
mapM_ (\line -> hoge hash line >>= putStrLn) $ line cs

元のコードのように、値を生成する部分(mapM hoge)と利用する部分(putStrLn)をプログラム上で分離したい場合は
多少の工夫がいる。例えば、入出力をしながらa型の値を生み出すジェネレータを次のように定義して、
newtype Generator a = Gen (IO (Maybe (a, Generator a)))
mapMで[String]を生み出す代わりにGenerator Stringとして記述するとか。
ただし、標準のリストと違って操作関数が用意されていないので面倒ではある。

420 名前:413 mailto:sage [2006/12/04(月) 14:08:07 ]
>>419
そうか、なるほど、mapM_の中で完結させれば良かったのか・・・。
mapMの返り値を受け取って処理しないといけない、って思いこんでた。
なんて頭が固いんだ、俺はorz
ジェネレータを使って云々かんぬんってのはまだ理解できないので、もっと勉強してみるよ。
ほんとにありがと!

421 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 11:29:31 ]
417を読むまで、doの中に列挙されているものは上から下へ遅延評価されるものだと思ってたorz
getContentsは例外なのね・・・。GHCのソースを見たらunsafeInterleaveIOを使ってたよ。


422 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 17:55:53 ]
本スレを見たあとこっちに来るとなんかほっとする

423 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 18:16:27 ]
んじゃ、そろそろ圏論勉強会をここではじめるか

424 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 18:36:06 ]
AAで頼むわ

425 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 18:42:03 ]
>>423
仕切ってくれるの?
ちょっと期待

426 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 19:18:52 ]
AAじゃなくてもたのむわ
この間友達に訊かれて、Haskell使いでないけど興味持った。

427 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 20:28:19 ]
2ちゃんっぽい解説をわくてかしながら待ってますよ




428 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 21:32:19 ]
おまいら、なんで本スレに行かないんだよw

429 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 00:00:51 ]
だって本スレ2chのノリじゃねーんだもん

430 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 00:12:22 ]
あそこは2chじゃねーよなw

431 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 00:21:23 ]
あそこはプログラミングする気が無い奴らに犯されてしまった
今からここが本スレになります

432 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 15:01:43 ]
早く家に帰ってHaskellを犯りたい(*´д`)

433 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 18:34:26 ]
www.haskell.org/ghc/docs/latest/html/users_guide/primitives.html

ここ見てUnboxed typeを使ってみようとしたんだが、Top-level bindings for unlifted types aren't allowed と出てコンパイルできん。
まあ、使い方を全然理解してないせいだと思うのだが(top-level bindingsとかunliftの意味もわからんし)、どこか解説ページないかな。
つか、あのページの説明だけでみんなは理解できるのだろうか(・∀・;)


434 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 19:00:25 ]
>どこか解説ページないかな。
なさそう。

>top-level bindings
モジュールレベルの束縛のこと。
module Foo where
f x = let y = x + 1 in y * 2
なら、fはトップレベルの束縛で、yはそうではない。

>unlifted types
unboxed typesとほとんど同義だと思う。

というか本スレに書けyo

435 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 19:02:43 ]
見てみたら>>433のリンク先にlifted typeの説明あるじゃん。
>Primitive types are always unlifted; that is, a value of a primitive type cannot be bottom.

436 名前:433 mailto:sage [2006/12/11(月) 21:43:56 ]
>>434

詳しい説明をありがとう。

>>top-level bindings
>モジュールレベルの束縛のこと。

さんくす!さっきのエラーは出なくなった!
今度は#がはずせないという問題にぶち当たったけど、こっちはI#の存在に気づいて解決した。

>というか本スレに書けyo
あっちは圏論の話題が中心だから、初歩的なことは書きづらくて・・・。

>>435
>見てみたら>>433のリンク先にlifted typeの説明あるじゃん。
すまん。読んでたけどそっちも全く意味わからんかった。

437 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 22:57:29 ]
>>436
>すまん。読んでたけどそっちも全く意味わからんかった。
ボトムっていうのは、停止しない/エラーになる計算の結果を表す概念上の値のこと。
(この辺厳密じゃないかも。間違ってたら分かってる人が突っ込んでくれることを期待)
例えば
b :: Int
b = b
と定義したとする。bを評価しようとすると止まらないから、bにはふつうの意味での値はない。しかし、
f :: Int -> Int
f x = 4
という関数があったとして、f bは4を返す。つまりfは問題なく呼ばれている。
では呼ばれたときの引数は何か、というのが問題になるが、これを「fはボトムを引数にして呼ばれた」
ということにする。つまり、bは評価しても止まらないけど、ボトムという仮想的な値を持っていることにする。
こうすると議論が単純になる。ちなみに、こう考えると、BoolにはTrue、False、ボトムの三値があることに
なるし、32ビットマシン上のGHCではIntに2^32+1個の値があることになる。

一方、実装を考えると、fに渡されるのは未評価のbで、これの実体はクロージャ、
あるいは関数ポインタ。bを評価することは、この関数ポインタを呼び出すことに相当する。
この場合はbを評価しようとすると止まらないわけだけど、こういう挙動がありえるためにはそもそも
bが関数ポインタでなきゃならない。

unboxed typeはただの計算器上の整数で、関数ポインタを隠し持つ余地はない。
Int#は厳密に2^32個の値しかとれない。つまり、ボトムになれない。よってunlifted type。

>あっちは圏論の話題が中心だから、初歩的なことは書きづらくて・・・。
たまたま圏論の話題で盛り上がっていただけで、気にすることはないと思う。
もともとそういうスレじゃないし。むしろ俺にも分かる話題は歓迎w



438 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 23:39:10 ]
haskellはプログラムを書く以外にも楽しみ方がある言語だから、棲み分けが起きてもいいんじゃないかな。次スレはちゃんとしたタイトルにしようぜ


439 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 23:44:58 ]
たとえ住みわけが必要だとしても、板の趣旨からして、
本スレはプログラムの話題、
理論的な話は情報学板、のほうがいいんじゃないだろうか。

440 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 15:37:04 ]
モナドから値を取り出す関数ってないんでしょうか?
hoge :: m a -> a
みたいな.


441 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 15:53:12 ]
>>440
個々のモナドごとにある。
head :: [a] -> a
fromJust :: Maybe a -> a
fromMaybe :: a -> Maybe a -> a
evalState :: State s a -> s -> a
runST :: (forall s. ST s a) -> a
unsafePerformIO :: IO a -> a -- 副作用があるので取扱い注意

ちなみにIOモナドだけは値を取り出す必要がない。
取り出さずに全部まとめてそれにmainを束縛すれば良いので。

442 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 20:07:25 ]
>>440
>>=関数を使ってください

443 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 21:50:17 ]
計算の途中でIOがつくと、その後ずっとついて回るからなんか気持ち悪い

444 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 22:35:08 ]
>>443
それによって参照透明性を保ってるんじゃないの?
詳しい人教えて!

445 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 16:00:42 ]
インストールに7時間かかりました。なにこの敷居の高さ

446 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 18:03:20 ]
>>4457時間もあきらめずにインストールした喪前が大好きだよ!

447 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 22:40:42 ]
敷居が高いけど、なれてくるとかなり楽しい。
ひょっとして、haskellはツンデレ美少女なんではなかろうか。

haskell「ごめんね素直じゃなくて」
俺「いや、しょうがないって」
haskell「・・・。お兄ちゃん、IOモナドの仕組みが知りたい、って言ってたよね」
俺「ん? まーな」
haskell「でも、そのためには私の中身を見ないとだめだよね・・・」
俺「い、いや、無理しなくていいよ」
haskell「・・・。見てもいいよ」
俺「え?」
haskell「見てもいいよ! お兄ちゃんだったらいいよ!」



448 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 23:12:10 ]
↓Haskell Brooks Curryの肖像

449 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 02:44:08 ]
www.haskell.org/bio.html
( ・∀・) <呼んだ?


450 名前:デフォルトの名無しさん mailto:dage [2006/12/14(木) 12:04:41 ]
今日はUnsafe IOの日だから中に出しちゃだめー!!!


451 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 17:34:55 ]
>>443
データ構造書くのはIOを入れずにやれという暗黙のメッセージだと思う
プログラムのしくみ本体とIOの部分を分けるということ
その方が実際動作が速いみたいだし

452 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 21:30:35 ]
もう、中に出すからforkIOしちゃったじゃないo(*`ε´*)o

453 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 21:49:49 ]
HashTableがIOを返すのがにんともかんとも・・・。

454 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 20:27:21 ]
本スレは活気があっていいなぁ・・・

455 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 23:32:22 ]
また俺がAA書いてやろうか?

456 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 10:19:52 ]
haskell中級者になったクマきぼん


457 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 23:04:25 ]
>>456
俺が初心者な以上、それは無理ってもんだ



458 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 00:06:46 ]
今でも遅延ストリーム萌な人いませんか?

459 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 01:35:34 ]
みなさんハスケルのどこが萌えですか。
僕は似たような記号を多用するその文体のとっつきにくさに萌えです。

460 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 01:42:02 ]
やっぱ>>447じゃね?

461 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 03:06:45 ]
俺はモナドという不思議な雰囲気を持ったツンデレ美少女なところに萌えてる。
haskellたんを知ってから仕事に全く集中できなくなってしまったよ・・・

462 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 06:46:57 ]
あの、質問しても良いです?
「ふつうのHaskellプログラミング」からなんですが、
length [""] -> 1
length [] -> 0
の""というのは文字が一文字も無い文字列を表しているのでしょうか?
もう一つ。
a
b
c
みたいに一行ずつ保存されているファイルは、エディタからはそうみえるだけで
実際には"a\nb\nc\c"みたいに保存されているのでしょうか?
そうじゃないとlines関数でリストに出来ないですもんね?

463 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 17:38:31 ]
>の""というのは文字が一文字も無い文字列を表しているのでしょうか?
その通り。
>実際には"a\nb\nc\c"みたいに保存されているのでしょうか?
その通り。

464 名前:デフォルトの名無しさん mailto:sage [2007/01/04(木) 16:06:05 ]
>>463
回答有り難うございます!

465 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 07:23:21 ]
こういう関数をHaskellで書くとしたら
どう書くのがベターでしょうか?

# Rubyですが
def hoge(ary)
ary.each_index do |i|
j = rand(i+1)
ary[i], ary[j] = ary[j], ary[i]
end
end


466 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:09:05 ]
>>465
こんな感じになった。やたらと面倒だったので改善案募集。

{-# OPTIONS_GHC -fglawgow-exts #-}
module Test where
import System.Random
import Data.Array.IArray
import Data.Array.ST
import Control.Monad.ST

hoge :: forall a i e. (IArray a e, Ix i, Random i) => a i e -> StdGen -> (a i e, StdGen)
hoge ia gi = runST act
  where
    act :: forall s. ST s (a i e, StdGen)
    act = do
      ma <- thaw ia
      let _ = ma :: STArray s i e
      g' <- shuffle ma gi first
      ra <- unsafeFreeze ma
      return (ra, g')
    (first, last) = bounds ia
    shuffle a g i = case ran of
      [] -> return g
      _:next:_ -> do
        let (j, g') = randomR (i, last) g
        x <- readArray a i
        y <- readArray a j
        writeArray a i y
        writeArray a j x
        shuffle a g' next
      where
        ran = range (i, last)

467 名前:466 mailto:sage [2007/01/11(木) 23:19:28 ]
まちがってた。

{-# OPTIONS_GHC -fglasgow-exts #-}
module Test where

import System.Random
import Data.Array.IArray
import Data.Array.ST
import Control.Monad.ST

hoge :: forall a i e. (IArray a e, Ix i, Random i) => a i e -> StdGen -> (a i e, StdGen)
hoge ia gi = runST act
  where
    act :: forall s. ST s (a i e, StdGen)
    act = do
      ma <- thaw ia
      let _ = ma :: STArray s i e
      g' <- shuffle ma gi (range bo)
      ra <- unsafeFreeze ma
      return (ra, g')
    bo@(_, last) = bounds ia
    shuffle a g [] = return g
    shuffle a g (i:is) = do
        let (j, g') = randomR (i, last) g
        x <- readArray a i
        y <- readArray a j
        writeArray a i y
        writeArray a j x
        shuffle a g' is



468 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 17:10:31 ]
>>465
>>467の人のようにこういう操作はArrayの方が得意だけど無理矢理やってみた
手抜きして右からまわしてる

import Random

-- main = print [1,2,3] >> hogeIO [1,2,3] >>= print

hogeIO :: [a] -> IO [a]
hogeIO xs = getStdRandom (hoge xs)

hoge :: (RandomGen g) => [a] -> g -> ([a], g)
hoge xs g = foldr iter ([],g) xs
  where
  iter x (xs,g) = (x':xs', g')
    where
    ((x', _:xs'), g') = replaceR x (x:xs) g

replaceR :: (RandomGen g) => a -> [a] -> g -> ((a, [a]), g)
replaceR x xs g = (replace i x xs, g')
  where
  (i,g') = randomR (0, length xs - 1) g

replace :: Int -> a -> [a] -> (a,[a])
replace n x xs = (z, ys ++ x:zs)
  where
  (ys, z:zs) = splitAt n xs

469 名前:468 mailto:sage [2007/01/13(土) 21:04:49 ]
Stateで書き換えてみたけど相変わらず長い (replaceやmainの定義は同じ)

import Control.Monad.State
type Rand a = State StdGen a

hogeIO :: [a] -> IO [a]
hogeIO xs = do
  g <- newStdGen
  return $ evalState (hoge xs) g

hoge :: [a] -> Rand [a]
hoge xs = foldr ((=<<).iter) (return []) xs
  where
  iter x xs = do
    (x', _:xs') <- replaceR x (x:xs)
    return (x':xs')

replaceR :: a -> [a] -> Rand (a,[a])
replaceR x xs = do
  i <- State $ randomR (0, length xs - 1)
  return $ replace i x xs






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<244KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef