06/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:デフォルトの名無しさん
06/10/24 23:09:22
>>369
>これはなんで module とか where とか 定義名 がいらないの?
module ... whereの部分は省略することができて、その場合
module Main(main) where
と書かれているとみなされる。
(main)という括弧書きは、モジュール中の定義のうち、mainだけを外部に公開する、
という意味。括弧書きがないときは、全ての定義が公開される。
371:デフォルトの名無しさん
06/10/24 23:25:53
デフォルトではprivate(不可視)にしてるということか
次2行目
qsort _ [] = []
これは qsort が 定義名 でいいのかな
_(アンダースコア) は 変数名っぽいけどそんなわけないよな
そして、 [ ] (配列) = [ ] (配列)
???
わからない
372:デフォルトの名無しさん
06/10/24 23:39:37
>>371
[]は空リスト。
_は厳密には変数名じゃないけど、そう考えても大して問題はない。
この行では、_がqsortの第一引数、[]が第二引数になっている。
qsort _ [] = []
は、qsortの第二引数が空リストのとき、第一引数に関係なく、結果は空リストである、と読む。
ここで定義しようとしているqsortは、第一引数として比較関数、第二引数としてリストを取り、
ソートされたリストを返す関数だから、この行は、「空リストをどんな比較関数を使ってソートしても結果は空リスト」と
言っていることになる。
373:デフォルトの名無しさん
06/10/25 00:04:32
比較関数っていうのがよくわかんない
Webで探したらこんな文章発見
>でも比較関数って何?って思いますよね。
>比較関数とは2つの引数を持ち、
>引数1が引数2より小さい場合は負の整数、
>同じ場合は0、
>引数1が引数2より大きい場合は正の整数を返します。
うーん・・・
_ (アンダースコア)がどういう役割なのかな、この場合 _(アンダースコア)以外はダメ?
例えば -(ハイフン)とか、ふつうのアルファベットとか
374:デフォルトの名無しさん
06/10/25 00:20:58
>>373
>比較関数っていうのがよくわかんない
ここでは、引数を二つとって、第一引数が第二引数より「小さい」ときのみTrue、
そうでなければFalseを返す関数の事。
普通の意味での大小関係にしたがってTrue/Falseを返す関数を比較関数として与えれば
qsortは昇順のソートをするし、逆に数値が大きいほど「小さい」と判断する
関数を与えればqsortは降順のソートをする。さらに、例えば引数の絶対値を比べる関数を
渡せば、絶対値が小さい順にソートすることができる。
> _ (アンダースコア)がどういう役割なのかな、この場合 _(アンダースコア)以外はダメ?
仮引数の名前なので、アルファベットからなる名前を好きにつけても良い。
qsort comparer [] = []
とか。ハイフンは演算子とみなされるのでだめ。
375:デフォルトの名無しさん
06/10/25 02:19:46
お札もえいないのか
376:デフォルトの名無しさん
06/10/25 10:17:13
お礼を期待して2chで書くのは不毛な行為だとオモタ。
377:デフォルトの名無しさん
06/10/25 12:05:22
>>375
「お札萌え居ないのか」?
巫女萌えならここに居るが何か。
378:初心者A
06/10/26 02:47:04
昨日はねちゃってたよ
サンクス
また明日とかよろ
379:デフォルトの名無しさん
06/10/26 02:59:00
おれい?
380: ◆XbPqxIJuLU
06/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:デフォルトの名無しさん
06/12/02 02:06:38
∩∩ ; とりあえずHelloWorld書いてみるクマ
;|ノ||` ┬-∥
__,/●●| __ | | ∥
| ; |`(_●)/ ミ . Y ∥
| .彡|∪||、 , .| | ∥
/:~ ̄ ̄ ̄ ̄:/.| | ∥
,|:::::. .......::/>> / ∥
/.::::: .. ...::::::|'(/\_/ ∥
../:.::: .. :.:::/.:/ /∥\
/.:::. ....:::..:::/.:/
' ̄ ̄ ̄ ̄ ̄ _/
|_| ̄ ̄ ̄ ̄|_|
382:デフォルトの名無しさん
06/12/02 02:09:08
main = putStrLn "Hello, World!"
∩___∩
| ノ ヽ
/ ● ● | こうですか!?わかりません!
| ( _●_) ミ
彡、 |∪| 、`\
/ __ ヽノ /´> )
(___) / (_/
| /
| /\ \
| / ) )
∪ ( \
\_)
383:デフォルトの名無しさん
06/12/02 02:10:28
できてんじゃねーかよ!
.,. -─-、 __
/. : : : : : : : : :\ 〈〈〈〈 ヽ
/.┛┗: : : : : : : : : :ヽ 〈⊃ ノ
. !.::┓┏,-…-…-ミ: ::', | | ∩___∩
{::: : : : :i '⌒' '⌒'i: : ::}ノ ! | ノ --‐' 、_\
{:: : : : : | ェェ ェェ |: : :} / 、 / ,_;:;:;ノ、 ● |
. { : : : : :| ,. |:: :;! / , ,,・_ | ( _●_) ミ
. ヾ: : :: :i r‐-ニ-┐| ::ノ/ , ’,∴ ・ ¨彡、 |∪| ミ
ゞイ! ヽ 二゙ノイゞ 、・∵ ’ / ヽノ ̄ヽ
/ _ ` ー一'´ ̄/ / /\ 〉
(___) / / /
384:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/12/02 02:30:34
_ /- イ、_
簡単クマ __ /: : : : : : : : : : : (
〈〈〈〈 ヽ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ
〈⊃ } {:: : : :ノ --‐' 、_\: : ::}
∩___∩ | | {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::}
| ノ ヽ ! ! 、 l: :ノ /二―-、 |: ::ノ
/ ● ● | / ,,・_ | //  ̄7/ /::ノ
| ( _●_) ミ/ , ’,∴ ・ ¨ 〉(_二─-┘{/
彡、 |∪| / 、・∵ ’ /、//|  ̄ ̄ヽ
/ __ ヽノ / / // |//\ 〉
(___) / / // /\ /
386:デフォルトの名無しさん
06/12/02 02:32:43
_ /- イ、_
∩___∩ あぁたたたたたたたたたたたた /: : : : : : : : : : : (
| ノ ヽ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ
/ ● | r‐っ'つ _,rノ´) {:: : : :ノ --‐' 、_\: : ::}
| ( _●) ーニ三、_,Eノ‐_r' {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::}
彡、 |∪|| r'´)  ̄-一ーt_j'´ 、 l: :ノ /二―-、 |: ::ノ
ゝ ヽノ _三 'ー'´) _,∩ ,,・_ | //  ̄7/ /::ノ
/ ー--ニ ̄‐ヽ  ̄,_)' 一(´,__) `! , ’,∴ ・ ¨ 〉(_二─-┘{/
一 - ―゙ゝ_,.) ニ(__,.)-''l-‐、・∵ ’ /、//|  ̄ ̄ヽ
一‐--(_) ノ` / // |//\ 〉
(__)' / // /\ /
putStrLnってなんだクマ?
387:デフォルトの名無しさん
06/12/02 02:34:04
関数名だボケ!!
,..||-ノ─ソ彡〈〈〈〈 ヽ
&. : : : : : : : : : ミ〈⊃ }
ミ.: : : : : : : : : : : : : : | |
,!::: : : :,-…-…-ミ: : : :| | ∩___∩
三 : : : :i ;;;/:' '⌒' i: : : | | | ノ --‐' 、_\
.{:: : : : |:::+;;; ェェ .|: : : : ニ ! ,,・,_ / ,_;:;:;ノ、 ● |
{ : : : :|ヾ ,.、 |:: : : :; ! / ’,∴ ・ ¨ | ( _●_) ミ
/ ヾ: :: :i r‐- ┃┐.| : : :ノ/、・∵ ’ 彡、 |∪| ミ
/ __ゞイ!ヽ┃ニ゙ノ イゞ‐ / ヽノ ̄ヽ
(___) /`' / /\ 〉
388:デフォルトの名無しさん
06/12/02 02:35:05
.,..-─- 、
r '´. : : : : : : : : : :ヽ
/.: : : : : : : : : : : : : :: ヽ
,!::: : : : : ,-…-…-ミ:: : :',
{:: : : : : :i ,;ノ;´:`ゞ、i: : :.:} もともと用意されてんだよ~っ!!
{:: : : : : :| ェェ;;;;;;;ェェ|: : : }
{ : : : : ::| ,.、 .| : : :;!∫
ヾ: :: : :i r‐-ニ┐| : riii=
ゞイ! ヽ 二゙ノ イ「 ノ
(⌒ ー ̄ ̄´ r⌒ ! 〉
ヽ弋パラッパッパ` ー'
〔勿\ ヽ ベキ
) r⌒丶) ベキ
ドカ ドカ / ! |' ∩__∩ ボキ
ドカ / /| l| ノ --‐' 、_\
( く ! ~l / ,_;:;:;ノ、 ●|
ドカ \ i | ∥彡 ( _●_) ミ
,__> ヽヽ从/ 彡 、 |∪| ミ
⊂ _ ⌒ヽ从 ⊃ ヽノ ̄⊃
389:デフォルトの名無しさん
06/12/02 02:43:42
;;;;;;;;;;;;;;;;;;;;;(::::::::::::::::::::::::::::::: ,...ヾ ;;\:: ::l;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;/
;;;;;;;;;;;;;;;;;;;;;;;;;ー-..::::ミミミ、ヾ ( );;) ヾ;;ヽ、 :i;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;://
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=-゙-`:::::::ミミ\ ゙゚''" i::ヽ;;i :: |;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:l /
;;;;;;;;;;;;;;;;;;;;;;;/::::::: :::::::.ミ::.'ヽ.........::::::::.、'_ノ l;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:i /
;;;;;;;;;;;;;;;;;,ノ:::::::::::. :::.` , 二;ニ= 、 ノ;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:ノ /
;;;;;;ー-'',::::::::::::::: ::: ' ,rェ ヽ` ヽ /;:;:;:;:;:;:;:;:;:;:;:;:;:// /
;;;;;;;;;;;;/":::::::::: _i ヽ゚ ン i` /;:;:;:;:;:;:;:;:;:;:;:;:;:ノ / /
ー' ̄::::::::::::::::: ____ /:;:;:ヽ ー /;:;:;:;:;:;:;:;:;:;:;:;:;:// / /
:::/::::::::::::::::::::: /;:;:;;:;:;:;:;:;:;:;:;:;:ヽ、 :;ー:ノミ; ::. /;:;:;:;:;:;:;:ー" ̄ / / / /
:/:::::::::::::::::::::::: /;:;:;/:::::::::::\ \;ヽ/ ̄ : /;:;:;:;:;/"/ / / / / /
:::::::::::::::;;:::::::::::: |:;:;:;:;:l ̄\:::::::::::\ );:ヽ /;:;:;:;:;:;l/ / / |\/\/ヽ∧
::::::::::::::::::;;;::::::::. \:;:;ヽ ヽ:::::::::::::'/;:;:/ /;:;:;:;:;:;:丿/ / _/ ハ あ
::::::::::::::::::::;;;;:::::: \;:;\ |:::::::/;/ /;:;:;:.:_,- " / /\ ス ら
::::::::::::::::::::::;;;;;;::: 、. \;:;\ l::/;/ / ̄/ / / / ケ い
:::::::::::::::::::::::::;;;;;;;;../ ̄ ー\ ;:;:;:/ // / / /< ル ぐ
::::::::::::::::::::::::::::;;/ ゙''ー 、_ / / / / / / !!! ま
390:デフォルトの名無しさん
06/12/02 02:46:09
_ /- イ、_
, /: : : : : : : : : : : (
意味わからんわw ゚ + ` /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ
’, ’,∴ ・ ¨ {:: : : : : : ::;:;: ;: ;:;: ;: ::}
∩___∩ ii ’,∴ ェェ ( : : : ::;:;: ;: ;:;: ; : ::::}
| : : ;: ヽ ! | | ! ,・,, (_l__\(: ::;:;: ;ヽ: ; : ::ノ
/ : : ;: |く^⌒!|| , ,,・_(_ヽ;:;:)ヽ: ::;:;: ;:; ::ノ
| : : ::;:ミ ::;:| ! ∴ ・ ¨C〉 (_二:;: ;::;:/
彡、 : : ::;:/⌒ ノ||!、 ’ ・∵ (、//|  ̄ヽ
/ / : : ::;:/!! / // |//\ 〉
(_/ : : ::;:/'' ̄ / // /
391:デフォルトの名無しさん
06/12/02 02:50:48
バカ専用 普通 ハッカー ウィザード
┝ - - - - ┿━━┿━━┥
∩___∩ /)
| ノ ヽ ( i )))
/ ● ● | / /
| ( _●_) |ノ / 今はここら辺クマーー!!
彡、 |∪| ,/
/ ヽノ /
392:デフォルトの名無しさん
06/12/02 02:52:26
∩─ー、
/ ● 、_ `ヽ
/ ( ● ● |つ
| /(入__ノ ミ そろそろモナドでもはじめるか・・・
、 (_/ ノ
\___ノ゙
/ 丶' ⌒ヽ:::
/ ヽ / /:::
/ /へ ヘ/ /:::
/ \ ヾミ /|:::
(__/| \___ノ/:::
/ /:::
/ y ):::
/ / /:::
/ /::::
/ /:::::
( く::::::::
|\ ヽ:::::
| .|\ \ :::::
\ .| .i::: \ ⌒i::
\ | /:::: ヽ 〈::
\ | i:::::: (__ノ:
__ノ ):::::
(_,,/\
393:デフォルトの名無しさん
06/12/02 02:53:10
まだはえーーよ!
.,..-─- 、
r '´. : : : : : : : : : :ヽ
/.: : : : : : : : : : : : : :: ヽ
,!::: : : : : ,-…-…-ミ:: : :',.. _
{:: : : : : :i ,;ノ;´:`ゞ、i: : :.:} / / _____
{:: : : : : :| ェェ;;;;;;;ェェ|: : : } ./ / /// \\ ./\ ∩___∩
{ : : : : ::| ,.、 .| : : :;!./ \  ̄  ̄/./ | ノ --‐' 、_\
ヾ: :: : :i r‐-ニ┐| : r / /"\.> .__/./ / ,_;:;:ノ、 ● |
ゞイ! ヽ 二゙ノ イ /__/ <__/ | ( _●_) ミ
/⌒ `ー―''´ヽ \_ ~\彡、 |∪| ミ
/ | // \_/ ヽノ  ̄\
( く"| _____|____,,___ /  ̄Z、 /,,,,,,,, /ヽ >
\ ヽノ _|||||_____.爪_|――゚'ヽ > ;;;'''''';;;';';; / <_/
r' ̄\_ 三〉)) ̄ ||||`ー' `-、ゝ ̄ ;;''' ∴。・、
)__/. ̄ ̄ |||| \ '':;:;,,,;;;'''`・゚。;;
394:デフォルトの名無しさん
06/12/02 02:59:51
-― ̄ ̄ ` ―-- _
, ´ , ~  ̄、"ー 、
_/ / ,r _ ヽ ノ
, ´ / / ● i"
,/ ,| / / _i⌒ l| i |
と,-‐ ´ ̄ / / (⊂ ● j'__ |
(´__ 、 / /  ̄!,__,u● | モナドって言っただけで撃つことないじゃん
 ̄ ̄`ヾ_ し u l| i /ヽ、 ちょっと調子にのっただけなのに・・・
,_ \ ノ(`'__ノ
(__  ̄~" __ , --‐一~⊂ ⊃_
 ̄ ̄ ̄ ⊂ ̄ __⊃
⊂_____⊃
395:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/12/02 03:14:55
,..-─- 、
/. : : : : : : : : : \
/.: : : : : : : : : : : : : : ヽ length関数は要素の数を返す!
,!::: : : :,-…-…-ミ: : : : :', 関数の右にあるのが引数だ
{:: : : : :i '⌒' '⌒' i: : : : :} どんな値でも長さを調べられるぜ
{:: : : : | ェェ ェェ | : : : : :} さぁ答えろ! 間違えたら殺す!!
{ : : : :| ,.、 .| :: : : :;!
_∧ ヾ: :: :i r‐-ニ-┐ | : : :ノ ∧
( \ ゞイ! ヽ 二゙ノ イゞ‐ ′ //~⌒ヽ
|( ● )| i\ _,,ノ| ` ー一'´//\ /i |( ● )|
\_ノ ^i | _,,..r''''" ノ | \`', / / / ̄`''ー | i^ ゝ_ノ
|_|,-''iつl/´ ヽノ| /\ / 、│ l⊂i''-,|_|
[__|_|/〉ヽ、 / |/ );;;;/\/ 'く /〈\|_|__]
[ニニ〉 ', ヽ. | /⌒| / ゚/ / 〈二二]
└―' '─┘
397:デフォルトの名無しさん
06/12/02 03:18:17
∩─ー、
/ ● 、_ `ヽ
/ ( ● ● |つ
| /(入__ノ ミ 上から・・・
、 (_/ ノ
\___ノ゙ 7
/ 丶' ⌒ヽ::: 7
/ ヽ / /::: 0
/ /へ ヘ/ /::: 1
/ \ ヾミ /|::: 1
(__/| \___ノ/:::
/ /:::
/ y ):::
/ / /:::
/ /::::
/ /:::::
( く::::::::
|\ ヽ:::::
| .|\ \ :::::
\ .| .i::: \ ⌒i::
\ | /:::: ヽ 〈::
\ | i:::::: (__ノ:
__ノ ):::::
(_,,/\
398:デフォルトの名無しさん
06/12/02 03:18:55
ちげーーよ!!
.,..-─- 、
r '´. : : : : : : : : : :ヽ
/.: : : : : : : : : : : : : :: ヽ
,!::: : : : : ,-…-…-ミ:: : :',.. _
{:: : : : : :i ,;ノ;´:`ゞ、i: : :.:} / / _____
{:: : : : : :| ェェ;;;;;;;ェェ|: : : } ./ / /// \\ ./\ ∩___∩
{ : : : : ::| ,.、 .| : : :;!./ \  ̄  ̄/./ | ノ --‐' 、_\
ヾ: :: : :i r‐-ニ┐| : r / /"\.> .__/./ / ,_;:;:ノ、 ● |
ゞイ! ヽ 二゙ノ イ /__/ <__/ | ( _●_) ミ
/⌒ `ー―''´ヽ \_ ~\彡、 |∪| ミ
/ | // \_/ ヽノ  ̄\
( く"| _____|____,,___ /  ̄Z、 /,,,,,,,, /ヽ >
\ ヽノ _|||||_____.爪_|――゚'ヽ > ;;;'''''';;;';';; / <_/
r' ̄\_ 三〉)) ̄ ||||`ー' `-、ゝ ̄ ;;''' ∴。・、
)__/. ̄ ̄ |||| \ '':;:;,,,;;;'''`・゚。;;
399:デフォルトの名無しさん
06/12/02 03:26:35
/. : : : : : : : : : \
/.: : : : : : : : : : : : : : ヽ
そんなバカなクマ ,!::: : : :,-…-…-ミ: : : : :',
{:: : : : :i'⌒' '⌒' i: : : : :}
∩___∩ {:: : : : | ェェ ェェ |: : : : :}
| ノ --‐' 、_\: : : :| ,.、 |:: : : :;!
/ ,_;:;:;ノ、 ●ヾ: :: :i r‐-ニ-┐ | : : :ノ 上の3つは
| ( _●_) ミゞイ! ヽ二゙ノ イゞ‐′ リスト(配列)だから正解!!
彡、 |∪| ミ ⌒゛ /⌒ヽ\
/⌒ ヽノ`''/ ⌒ ー--、' ,/`/
/ /~〔_彡.ミ⌒ヽー,==-、 ヽ_,zn' /
| | / `^,/  ̄,ノ ヽ、__^ノ /
彡ノ | /⌒ヽ i⌒ ー 、 ヽ
ヽ l人 | .) ` . |ー┐
\ `⌒ | ノヽ、_ ノ.ヽ」
/. : : : : : : : : : \
/.: : : : : : : : : : : : : : ヽ
,!::: : : :,-…-…-ミ: : : : :',
{:: : : : :i '⌒' '⌒' i: : : : :}
{:: : : : | ェェ ェェ |: : : : :} でも下の2つは
{ : : : :| ,.、 |:: : : :;! ただの文字列!
ヾ: :: :i r‐-ニ-┐| : : :ノ
,,,! ヽ二゙ノ イゞ‐′ こういう場合は文字数を
ひっかけクマ・・・ /  ̄⌒ヽ 数えるんだろーがぁぁ!!
| lヽ、 | __
∩___∩ L__| |_. `ヽ
| ノ --‐' 、_\ lヽ‐'〉 .|
/ ,_;:;:;ノ、 ●ヾ _ \/ .|
| ( _●_) ミ ー-`\ \,,ノギリギリ
彡、 |∪| ミ. `ヽ )
彡 ヽノ/ ,// /
400:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/12/02 03:48:22
バカ専用 普通 ハッカー ウィザード
┝ - - - - ┿━━┿━━┥
∩___∩ /)
| ノ ヽ ( i )))
/ ● ● | / /
| ( _●_) |ノ / まだここら辺クマーー!!
彡、 |∪| ,/
/ ヽノ /
405:デフォルトの名無しさん
06/12/02 13:34:53
>>396,397,399
length [""]
は、空文字列をひとつ含む配列なんだから
1
だよ。
406:デフォルトの名無しさん
06/12/02 13:59:22
// | | ,イ
// l | //
// ∩___∩ / ||ノノ_/ /
/'" | ノ ヽ / /
/ ,/./ ● ● | / ;/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
,. ‐'" |:| ( _●_) ミ / ,< 間違えてんじゃねーかよ!!
, ィ'" |:::彡 |∪| / , ' \___________
,.イ |:::::::L ヽノ,,,,ノ .//´ ̄ ̄`ヽ \
//i| ,.|::::::レ! /:::::/ // \ ( ̄`ヽ、 \
./:::::{ |ヽ |ヽ∠.|::::::| メ:::::::; '_/// /`''"⌒i ,.....,_ \、 `ヽ、\
`''" `'''`ー-|'" ,':::::::|':::::::; ' / / ヾ-┤ |'´,. --.、`丶、\ `\
ノ {::::::/:::::::/__ノ ∠/ / _ /- イ、_ ヽ ヽ
/ ノ/⌒ヽ::::} / /: : : : : : : : : : : (' ,ノ,ハ ガッ
< {ム/ }/ ∠/ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ | ヽ
`ヽ、 'ー'-'‐'′ / {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::} !`'ー─ゝ、 _
ヽ / l: :ノ /二―-、 |: ::ノ / _ `丶..ノF'!
ヽ-‐''" ̄``ヽ | //  ̄7/ /::ノ ̄ヽ ̄ `i丶、__,.ノ
ヾ(_二─-┘{/ ヽ、_ }ヽ、
 ̄ ̄ ``'"ー-
407:デフォルトの名無しさん
06/12/02 21:51:40
length ["abc", "AAA", "クマ"] は 7 じゃなくて 3 だろ!
408:デフォルトの名無しさん
06/12/02 22:57:35
| | | |
_ /- イ、_ |_|_|_|_
バカ野郎! /: : : : : : : : : : : ( / 〉〉〉〉 カスが!
l⌒)OOo /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ { ⊂〉
∩___∩ { ) ) {:: : : :ノ --‐' 、_\: : ::} | | ∩___∩
| ノ ヽ | ::::::/ {:: : :ノ ,_;:;:;ノ ////ヾ: :::} l l / ヽ |
/ ● ● | / ::::| 、 l: :ノ /二―-、 |: ::ノ ヽ | ● ● ヽ
| ( _●_) ミ/ ) ,,・_ | //  ̄7/ /::ノ .・,,; \彡 (_●_ ) |
彡、 |∪| / / ̄, ’,∴ ・ ¨ 〉(_二─-┘{/ ∴ ;・, ; \ |∪| ミ
/ __ ヽノ / / 、・∵ ’ /、//|  ̄ ̄ヽ 、;:,・ ヽ. ヽノ___ ヽ
(___) / / / // |//\ 〉 ヽ (_____)
409:デフォルトの名無しさん
06/12/02 22:58:52
うるせーばか!
__ /- イ、_
∩___∩ / 〉〉〉〉 /: : : : : : : : : : : (
/_ノ `ー- ゝ\ 、 { ⊂〉/: : : : ::;:;: ;: ;:;: ; : : : ::ゝ〈〈〈〈 ヽ ∩___∩
| ● ゝ:;;;:;:_, ヽ , ,・_ | {:: : : :ノ --‐' 、_\: : ::}〈⊃ } | ノ --‐' 、_\
彡 (_●_ ) '' |, ’ ,∴ l {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::} | | 、 / ,_;;;:;ノ、 ● |
彡、 |∪| ミ、・∵ ’ ヽ l: :ノ /二―-、 |: ::ノ ! ,,・_ | ( _●_) ミ
γ ̄ ヽノ ヽ) \ | //  ̄7/ /::ノ / , ’,∴ ・¨彡、 |∪| ミ
〈 /i i \ 〉(_二─-┘{/ / 、・∵ ’ / ヽノ ̄ヽ
ノ ノ ヽ 、//|  ̄ /´ / /\ 〉
410:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/12/03 01:33:32
. ┌──────────┐
つ | 文字列 = 文字のリスト │
. | "kuma" .→ ['k', 'u', 'm', 'a'] |
. | "ヌケドナルド" → ['ヌ', 'ケ', 'ド', 'ナ', 'ル', 'ド'] .|
. └──────────┘
つ [] == ""
412:デフォルトの名無しさん
06/12/03 02:50:45
正確には
[] :: [Char] だな
413:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/12/03 21:26:50
>>413
その通り。
csの終端を見つけるまでmapM_が終わらないから、
putStrが実行されることもない。
415:414
06/12/03 21:27:23
ごめん。mapM_じゃなくてmapMね。
416:413
06/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:デフォルトの名無しさん
06/12/04 00:29:46
>>416
IOは上から順に実行されるのが原則(getContentsは例外)で、
評価と違って「値の要求があって初めて」実行したりはしない。
だから
r <- mapM hoge $ lines cs
とあったら、rが必要とされるか否かにかかわらずmapMは最後まで実行される。
これは、そうでないと動作の順序を予測するのが難しくなって不便だからだ。
どうしてもその挙動が必要なら、unsafeInterleaveIOという関数を使えば実現できる。
ちなみにそのコードは行ごとにputStrしているだけで、
mapM_ putStrLn $ lines cs
と書いているのとかわらない。
何がしたいかをもう少し詳しく教えてくれたら、もうちょっとまともな助言ができると思う。
418:413
06/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:デフォルトの名無しさん
06/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
06/12/04 14:08:07
>>419
そうか、なるほど、mapM_の中で完結させれば良かったのか・・・。
mapMの返り値を受け取って処理しないといけない、って思いこんでた。
なんて頭が固いんだ、俺はorz
ジェネレータを使って云々かんぬんってのはまだ理解できないので、もっと勉強してみるよ。
ほんとにありがと!
421:デフォルトの名無しさん
06/12/06 11:29:31
417を読むまで、doの中に列挙されているものは上から下へ遅延評価されるものだと思ってたorz
getContentsは例外なのね・・・。GHCのソースを見たらunsafeInterleaveIOを使ってたよ。
422:デフォルトの名無しさん
06/12/10 17:55:53
本スレを見たあとこっちに来るとなんかほっとする
423:デフォルトの名無しさん
06/12/10 18:16:27
んじゃ、そろそろ圏論勉強会をここではじめるか
424:デフォルトの名無しさん
06/12/10 18:36:06
AAで頼むわ
425:デフォルトの名無しさん
06/12/10 18:42:03
>>423
仕切ってくれるの?
ちょっと期待
426:デフォルトの名無しさん
06/12/10 19:18:52
AAじゃなくてもたのむわ
この間友達に訊かれて、Haskell使いでないけど興味持った。
427:デフォルトの名無しさん
06/12/10 20:28:19
2ちゃんっぽい解説をわくてかしながら待ってますよ
428:デフォルトの名無しさん
06/12/10 21:32:19
おまいら、なんで本スレに行かないんだよw
429:デフォルトの名無しさん
06/12/11 00:00:51
だって本スレ2chのノリじゃねーんだもん
430:デフォルトの名無しさん
06/12/11 00:12:22
あそこは2chじゃねーよなw
431:デフォルトの名無しさん
06/12/11 00:21:23
あそこはプログラミングする気が無い奴らに犯されてしまった
今からここが本スレになります
432:デフォルトの名無しさん
06/12/11 15:01:43
早く家に帰ってHaskellを犯りたい(*´д`)
433:デフォルトの名無しさん
06/12/11 18:34:26
URLリンク(www.haskell.org)
ここ見てUnboxed typeを使ってみようとしたんだが、Top-level bindings for unlifted types aren't allowed と出てコンパイルできん。
まあ、使い方を全然理解してないせいだと思うのだが(top-level bindingsとかunliftの意味もわからんし)、どこか解説ページないかな。
つか、あのページの説明だけでみんなは理解できるのだろうか(・∀・;)
434:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/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
06/12/11 21:43:56
>>434
詳しい説明をありがとう。
>>top-level bindings
>モジュールレベルの束縛のこと。
さんくす!さっきのエラーは出なくなった!
今度は#がはずせないという問題にぶち当たったけど、こっちはI#の存在に気づいて解決した。
>というか本スレに書けyo
あっちは圏論の話題が中心だから、初歩的なことは書きづらくて・・・。
>>435
>見てみたら>>433のリンク先にlifted typeの説明あるじゃん。
すまん。読んでたけどそっちも全く意味わからんかった。
437:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/12/11 23:39:10
haskellはプログラムを書く以外にも楽しみ方がある言語だから、棲み分けが起きてもいいんじゃないかな。次スレはちゃんとしたタイトルにしようぜ
439:デフォルトの名無しさん
06/12/11 23:44:58
たとえ住みわけが必要だとしても、板の趣旨からして、
本スレはプログラムの話題、
理論的な話は情報学板、のほうがいいんじゃないだろうか。
440:デフォルトの名無しさん
06/12/12 15:37:04
モナドから値を取り出す関数ってないんでしょうか?
hoge :: m a -> a
みたいな.
441:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/12/12 20:07:25
>>440
>>=関数を使ってください
443:デフォルトの名無しさん
06/12/12 21:50:17
計算の途中でIOがつくと、その後ずっとついて回るからなんか気持ち悪い
444:デフォルトの名無しさん
06/12/12 22:35:08
>>443
それによって参照透明性を保ってるんじゃないの?
詳しい人教えて!
445:デフォルトの名無しさん
06/12/13 16:00:42
インストールに7時間かかりました。なにこの敷居の高さ
446:デフォルトの名無しさん
06/12/13 18:03:20
>>4457時間もあきらめずにインストールした喪前が大好きだよ!
447:デフォルトの名無しさん
06/12/13 22:40:42
敷居が高いけど、なれてくるとかなり楽しい。
ひょっとして、haskellはツンデレ美少女なんではなかろうか。
haskell「ごめんね素直じゃなくて」
俺「いや、しょうがないって」
haskell「・・・。お兄ちゃん、IOモナドの仕組みが知りたい、って言ってたよね」
俺「ん? まーな」
haskell「でも、そのためには私の中身を見ないとだめだよね・・・」
俺「い、いや、無理しなくていいよ」
haskell「・・・。見てもいいよ」
俺「え?」
haskell「見てもいいよ! お兄ちゃんだったらいいよ!」
448:デフォルトの名無しさん
06/12/13 23:12:10
↓Haskell Brooks Curryの肖像
449:デフォルトの名無しさん
06/12/14 02:44:08
URLリンク(www.haskell.org)
( ・∀・) <呼んだ?
450:デフォルトの名無しさん
06/12/14 12:04:41
今日はUnsafe IOの日だから中に出しちゃだめー!!!
451:デフォルトの名無しさん
06/12/14 17:34:55
>>443
データ構造書くのはIOを入れずにやれという暗黙のメッセージだと思う
プログラムのしくみ本体とIOの部分を分けるということ
その方が実際動作が速いみたいだし
452:デフォルトの名無しさん
06/12/14 21:30:35
もう、中に出すからforkIOしちゃったじゃないo(*`ε´*)o
453:デフォルトの名無しさん
06/12/14 21:49:49
HashTableがIOを返すのがにんともかんとも・・・。
454:デフォルトの名無しさん
06/12/19 20:27:21
本スレは活気があっていいなぁ・・・
455:デフォルトの名無しさん
06/12/19 23:32:22
また俺がAA書いてやろうか?
456:デフォルトの名無しさん
06/12/20 10:19:52
haskell中級者になったクマきぼん
457:デフォルトの名無しさん
06/12/20 23:04:25
>>456
俺が初心者な以上、それは無理ってもんだ
458:デフォルトの名無しさん
06/12/21 00:06:46
今でも遅延ストリーム萌な人いませんか?
459:デフォルトの名無しさん
06/12/21 01:35:34
みなさんハスケルのどこが萌えですか。
僕は似たような記号を多用するその文体のとっつきにくさに萌えです。
460:デフォルトの名無しさん
06/12/21 01:42:02
やっぱ>>447じゃね?
461:デフォルトの名無しさん
06/12/21 03:06:45
俺はモナドという不思議な雰囲気を持ったツンデレ美少女なところに萌えてる。
haskellたんを知ってから仕事に全く集中できなくなってしまったよ・・・
462:デフォルトの名無しさん
07/01/03 06:46:57
あの、質問しても良いです?
「ふつうのHaskellプログラミング」からなんですが、
length [""] -> 1
length [] -> 0
の""というのは文字が一文字も無い文字列を表しているのでしょうか?
もう一つ。
a
b
c
みたいに一行ずつ保存されているファイルは、エディタからはそうみえるだけで
実際には"a\nb\nc\c"みたいに保存されているのでしょうか?
そうじゃないとlines関数でリストに出来ないですもんね?
463:デフォルトの名無しさん
07/01/03 17:38:31
>の""というのは文字が一文字も無い文字列を表しているのでしょうか?
その通り。
>実際には"a\nb\nc\c"みたいに保存されているのでしょうか?
その通り。
464:デフォルトの名無しさん
07/01/04 16:06:05
>>463
回答有り難うございます!
465:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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
07/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:デフォルトの名無しさん
07/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
07/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
470:デフォルトの名無しさん
07/01/13 23:20:57
runSTとかunsafeFreezeとかさっぱりわからん。
なんかくやしい。
471:デフォルトの名無しさん
07/02/14 00:17:05
良スレ 保守
472:380
07/02/14 23:30:00
【第一部】 AAでHaskellのお勉強(超初心者用)
>>380-410
【第二部】 AAで圏論のお勉強(入門編)
Coming soon!
473:デフォルトの名無しさん
07/02/15 00:00:34
,j;;;;;j,. ---一、 ` ―--‐、_ l;;;;;;
{;;;;;;ゝ T辷iフ i f'辷jァ !i;;;;;
ヾ;;;ハ ノ .::!lリ;;r゙ 圏論は難しい・・・
`Z;i 〈.,_..,. ノ;;;;;;;;>
,;ぇハ、 、_,.ー-、_',. ,f゙: Y;;f そんなふうに考えていた時期が
~''戈ヽ `二´ r'´:::. `! 俺にもありました
474:デフォルトの名無しさん
07/02/15 00:01:18
/ .\
/ .\
\ / \ /
\ ___________ . /
\ ./ \ /
| \/ \/...|
| | | |
| | | |
.._ |_| |_|_..
| | さあ‥ 逝こうか‥‥ | |
| | | |
| | | |
| | | |
| |/ ..\| |
| | | |
.._|/| _ _ _ _ _ _ _ _ ...|\|_
/ ..| | _-_-_-_-_- _ | | \
| |/_/━ ━ ━ ━ ━ ━\_\| |
.._| /_/━ ━ ━ ━ ━ ━ ━ \_\.|_
/_/━ ━ ━ ━ ━ ━ ━ \_\
/ /━ ━ ━ ━ ━ ━ ━\ \
475:デフォルトの名無しさん
07/02/15 22:54:57
∩___∩
| ノ ヽ
/ ● ● | たった一つの命を捨てて
|◎) ̄  ̄|| ̄ ̄ ) ミ 生まれ変わった不死身の体
彡、___||_/`\ 鉄の圏論を叩いて砕く
/ __ /´> ) クマーンがやらねば誰がやる
(___) / (_/
| /
| /\ \
| / ) )
∪ ( \
\_)
476:デフォルトの名無しさん
07/02/15 23:04:19
_i^i__i^i_ i^i ._i^i_ __, -―- 、___
|*||*| ∩___∩ i^i _i^i_ | | |@ll|(_/,,,, ,,,, ヽ_)
|≡||≡|| ノ ヽ ([])|;□;|.(≡)|_| |● ● | どうすれば圏論をわかりやすく
. 二二/ ● |二二( (二二二二 彡(_●_ ) ミ 説明できますかね?
| ミ ) ) / ` ''∪'' / ヽ
彡、 _ノ Gノ'フ= ___ / /i ` ー '" iヽ |
/ ヽ / / | ! / / | | | .l. i
..─|ヽ ヽ/─==i─Y-(_ノ─i二i──(⌒)
___ヽ /ヽノ └-┘ ┴ ..└┘ . ̄
| ___ i
477:デフォルトの名無しさん
07/02/25 01:59:18
∩___∩
|ノ⌒ ⌒ ヽ
/ ●) ●) |
Let's | ( _●_) ミ Haskell♪
彡、 |∪| 、`
/ ヽノ ヽ
/ 人 \\ 彡
⊂´_/ ) ヽ__`⊃
/ 人 (
(_ノ (_)
478:デフォルトの名無しさん
07/02/25 02:00:25
A B
∩___∩ /)
| ノ ヽ ( i )))
/ ● ● | / /
| ( _●_) |ノ /
彡、 |∪| ,/
/ ヽノ /´ ここにオブジェクトAとオブジェクトBがあるクマ
479:デフォルトの名無しさん
07/02/25 02:02:12
A → B
∩___∩
| ノ ヽ
/ > < | じつはAさんはBさんを好きなんだクマ
| //// ( _●_) ミ
彡、 l⌒l ノ
/ __ \ \ヽ
. (___) \__)
480:デフォルトの名無しさん
07/02/25 02:07:27
∩___∩
| ノ ヽ
/ ● ● | と、いうように
| ( _●_) ミ ある対象とある対象がなんらかの関係をもっていることを
彡、 |∪| 、`\ 圏論では「射」と言うクマ
/ __ ヽノ /´> )
(___) / (_/
| /
| /\ \
| / ) )
∪ ( \
\_)
481:デフォルトの名無しさん
07/02/25 02:09:55
∩___∩
| ノ ヽ A → B
/ ● ● |
| ( _●_) ミ この場合、Aさんを「ドメイン」、Bさんを「コドメイン」と言うクマ
彡、 |∪| 、`\
482:デフォルトの名無しさん
07/02/25 02:15:49
∩___∩
| ノ _, ,_ ヽ
/ ● ● | 別にBさんを好きじゃなくてもいいんだクマ
| ( _●_) ミ Bさんを嫌いでもいいし
彡、 |∪| ノ BさんはAさんの嫁でもいいし
⊂⌒ヽ / ヽノ ヽ /⌒つ AさんがBさんをレイ-プする、という関係でもなんでもいいクマ
\ ヽ / ヽ /
\_,,ノ |、_ノ
483:デフォルトの名無しさん
07/02/25 02:19:20
∩___∩
| ノ ヽ
/ ● ● | A → B
| ( _●_) ミ ココ!!
彡、 |∪| 、`\
/ __ ヽノ /´> ) この図では「→」がAさんとBさんの関係を表してるクマ
(___) / (_/ 関係というものには方向性が付き物なんだクマ
| /
| /\ \ この「関係を表した矢印」こそが「射」クマー!
| / ) )
∪ ( \
\_)
484:デフォルトの名無しさん
07/02/25 02:20:05
てらわかりやす
485:デフォルトの名無しさん
07/02/25 02:21:35
まだまだ続クマ?
\  ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ (´´
\(⌒-⌒) o (´⌒(´
(・(ェ,,)・ )つ⌒`つ≡≡≡(´⌒;;;≡≡≡
 ̄ ̄ (´⌒(´⌒;;
ズザーーーーーッ
486:デフォルトの名無しさん
07/02/25 02:40:43
/ ̄)
∩____∩. | | AさんからBさんへの「射」は1つとは限らないクマー!
| ノ ヽ.| |
/ ● ● || | くニ} {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{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj「エロエロ射」」
/ ,へ  ̄ ̄`ヽ
/ / \ t─┐ |
(__/ > ). | |_
/ / (___)
( \
\__)
487:デフォルトの名無しさん
07/02/25 02:56:02
、 l _,
ヽ/⌒ヘ~
., 't,_,ノ丶 ∩、 ∩
/ ! '` | '─-' '\
,/ ● 'i,
/ ( _●_) ● i,
彡 しノ ミ あたまをやわらか~くするクマ~
|`:、\ 'ii __,/
'i、 ̄~~ ij 乙__ノi
^-ァ __,ノ
r^~"i' 'l
!、 ! l
~^''!, ,_ ,!_
\ l,~^''‐--::,,⊃ ) ) ) )
`'‐’
488:デフォルトの名無しさん
07/02/25 03:02:26
X Y Z
∩___∩ /)
| ノ ヽ ( i )))
/ ● ● | / /
| ( _●_) |ノ /
彡、 |∪| ,/
/ ヽノ /´ ここにオブジェクトXとオブジェクトYとオブジェクトZがあるクマ
489:デフォルトの名無しさん
07/02/25 03:06:57
∩____∩
/ ヽ X → Y YさんはXさんのいとこクマ
/ ● ● | Y → Z ZさんとYさんのいとこクマ
| ( _●_ ) ミ
彡、,, |∪| /
/__ ヽノ l\
(___u) (uニ ).
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
490:デフォルトの名無しさん
07/02/25 03:09:49
|:::::::::::::::::::::::::::::::
|" ̄ ゙゙̄`∩::::::::::::::::
|,ノ ヽ, ヽ::::::::::::::::::::::::: X → Y
|● ● i'゙ ゙゙゙̄`''、::::::::::::::::
| (_●_) ミノ ヽ ヾつ:::::::::: ↓
| ヽノ ノ● ● i::::::::::
{ヽ,__ )´(_●_) `,ミ::::::: Z
| ヽ / ヽノ ,ノ::::::
あれ?XさんとZさんは・・・いとこ?
491:デフォルトの名無しさん
07/02/25 03:17:59
∩─ー、
/ ● 、_ `ヽ
/ ( ● ● |つ
| /(入__ノ ミ 所詮、XとZが
、 (_/ ノ いとこだろーと、はとこだろーと
\___ノ゙ 関係ないのさ・・・
/ 丶' ⌒ヽ:::
/ ヽ / /::: ただひとつ言えることは
/ /へ ヘ/ /::: XからZへのなんらかの関係があるかもしれない
/ \ ヾミ /|::: ってことだ
(__/| \___ノ/:::
/ /::: これを圏論では射の「合成」と呼ぶ
/ y ):::
/ / /:::
/ /:::: X → Y
/ /:::::
( く:::::::: ↓
|\ ヽ:::::
| .|\ \ ::::: Z
\ .| .i::: \ ⌒i::
\ | /:::: ヽ 〈:: [XからZへの矢印が考えられる]
\ | i:::::: (__ノ:
__ノ ):::::
(_,,/\
492:デフォルトの名無しさん
07/02/25 03:19:52
|
|.-─-、
| : : : : : : : : \
|: : : : : : : : : : : ヽ
|-…-…-ミ: : : : :',
| '⌒' '⌒' i: : : : :}
| ェェ ェェ |: : : : :}
| ,.、 |:: : : :;! どこで出ていこうかな・・・・・
| r‐-ニ-┐| : : :ノ
|! ヽ 二゙ノ イゞ‐′
| ` ー一'´丿 \
| \___/ /`丶、
| /~ト、 / l \
493:デフォルトの名無しさん
07/02/25 03:50:43
,..-─- 、
/. : : : : : : : : : \
関数Xは /.: : : : : : : : : : : : : : ヽ
クラスYを引数にする ,!::: : : :,-…-…-ミ: : : : :',
X(Y) {:: : : : :i \ / i: : : : :}
ちなみにYは {:: : : : | ェェ ェェ |: : : : :} 合成のほかの例え!!
Zという属性を. , 、 . { : : : :| ,.、 .. |:: : : :;!
持っている ヽ ヽ. _ .ヾ: :: :i r‐-ニ-┐ .| : : :ノ
} >'´.-!、ゞイ! ヽ二゙ノ イゞ‐′
| -! \` ー一'´丿 \
ノ ,二!\ \___/ /`丶、
/\ / \ /~ト、 / l \
/ 、 `ソ! \/l::::|ハ/ l-7 _ヽ
494:デフォルトの名無しさん
07/02/25 03:52:45
_ /- イ、_
__ /: : : : : : : : : : : (
〈〈〈〈 ヽ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ
〈⊃ } {:: : : :ノ --‐' 、_\: : ::}
∩___∩ | | {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::}
| ノ ヽ ! ! 、 l: :ノ /二―-、 |: ::ノ
/ ● ● | / ,,・_ | //  ̄7/ /::ノ
| ( _●_) ミ/ , ’,∴ ・ ¨ 〉(_二─-┘{/
彡、 |∪| / 、・∵ ’ /、//|  ̄ ̄ヽ
/ __ ヽノ / / // |//\ 〉
(___) / / // /\ /
わかりづらいクマ
495:デフォルトの名無しさん
07/02/25 04:10:53
_ /- イ、_
/: : : : : : : : : : : (
/: : : : ::;:;: ;: ;:;: ; : : : ::ゝ; 関数X → クラスY
.{:: : : :ノ --‐' 、_\: : ::}
.{:: : :ノ ,_;:;:;ノ、 ェェ ヾ: ↓
.l: :ノ /二―-、 |: ::ノ..
| //  ̄7/ /::ノ 属性Z
. 〉(_二─-┘{/
/、//|  ̄ ̄ヽ
わかんないかなコレ・・・
496:デフォルトの名無しさん
07/02/25 04:14:39
class X {
method( Y ) {}
}
class Y {
Z z;
}
class Z {}
497:デフォルトの名無しさん
07/02/25 04:38:27
\ i /
── ・ ─ ← ヌッケ
 ̄ 二─ _ // | \
 ̄ 、 - 、 / / |
-、\ \ / /
\\ \
/ \ヾ ヽ ヽ
/ \ ヾ、 | i
クマソッ // |! `i |
/// | |
/ ( | |
<_,へ 丶-、 | |
__●_ rm \ \ |! リ |
/ ヽ-'⊇) ̄`ヾ │ / | |
⊂/ ● /\_,.-、 / / / /
│ /\ / _/ / / //
⊂丿 ミ (⌒)  ̄ / / /
\__ミ / / //_ /
\_/ _二─
498:デフォルトの名無しさん
07/02/25 04:39:35
A → B → C H
↓ ↑ ↑ ↓
D E → F → J
↑ ↑
G H → I くまー
r -、,, - 、
__ ヽ/ ヽ__
くまー ,"- `ヽ, / ● l )
/ ● \__ (● ● i"
__/ ●)  ̄ )"__ "`;
.(_i ● ' __, '"  ̄`'(___/.i⌒i
丶_ ,i⌒i,,_(_/ ● i ̄ ̄ )_|__
__, '"  ̄ ヽ! ● ●) ミ~ ̄_● ヽ)
くまー (_/ ● i ∪ / ⊂{● | くまー
l ●( _●) (  ̄)- / -' i
/ヽ、 |∪l T i ● '")
くまー
499:デフォルトの名無しさん
07/02/25 04:43:17
i⌒i⌒i
| ヽ
/ 人__ヽ∩
/ / ヽ >>498のように人間は人間同士いろんな関係をもってるクマ
/ / ● ● | 物事だってそうだクマ
( | ( _●_) ミ コレとかアレのいろんな関係で成り立っているクマ
\ 彡、 |∪| (
\ ヽノ `ー´⌒\
\ /\ \、
\ / (  ̄)
\ | ( ̄ ̄ ̄ ̄)
\ ヽ/ / ̄ ̄
\__/
500:デフォルトの名無しさん
07/02/25 04:48:31
∩___∩
/ ノ \ ヽ
| ● ● |
彡 (_●_) ミ
/、 |∪| ,\ 複数の「対象」と複数の「射」の集まり
, -‐- くJ( ヽノ ゝ-rr- 、、 ~~~~~~ ~~~~~
/Y ,r 、 `ー r'"^〃 、 つヒヽ これこそが「圏」 = 「カテゴリー」
,ノ '^` i! =テミ i' 天ニ ミ、 ='"^ヾ }
,/ ''=''" ノ-‐'ヾ-人,,__ノnm、''::;;,, イ
i! ,∠-―-、、 `ー'フヾ、 j 圏論(カテゴリー論)の基礎となるものだクマ
f'´ ノし `丶、 ー=ミ-JE=- /
ヾ=ニ- 彡^ 〃 ,,>、、`''ー-::,,_,,ノ
``ー--┬:, ''"~´フ ソ´`7'' ''"´
,に (`゙゙´ノ f^ヽ
,ハ ,ィ' ,;-ゝ、
/ミ`ーt!,_,ィ-‐彡''"^ヽ
/ ヾ::::::::::::::::r''" ぃ ;}
l t:::::::::::/ ノ /
l! `'T7′ / /
501:デフォルトの名無しさん
07/02/25 05:06:35
圏(カテゴリー)
┏━━━━━━━━━━━┓
┃クマー クマー クマー ┃
┃~~~~~~ ~~~~~~ ~~~~~~ ┃
┃ ↑[神] ↑[神] ↑[神] ┃
┃ [好き] [好き] . ┃
┃ A君 → Bちゃん → . C君 ┃
┃ ~~~~ ~~~~~~~~ ~~~~~ . . ┃
┃ ↑[好き] ↓[爆破] ┃
┃ . . [保有] ┃
┃ . . D君 → フェラーリ ┃
┃ ~~~~ ~~~~~~~~~~ ┃
┃ ↓[ペット] . .┃
┃ [同類] . .┃
┃ヌッケ ← 犬 .┃
┃~~~~~~ ~~~ . ┃
┗━━━━━━━━━━━┛
502:デフォルトの名無しさん
07/02/25 05:16:08
【まとめ】
┏━┓ 射 ┏━┓
┃.A.┃ → ┃.B.┃
┗━┛ ┗━┛
対象 対象
(ドメイン) (コドメイン)
上の図が基本要素
これが複数あつまり関係しあったものを圏という
503:デフォルトの名無しさん
07/02/25 05:20:23
ふぅ、つかれたクマー
∩___∩
| ノ ヽ ( )
/ ● ● | ( )
__| ( _●_) ミ__ ( )
(_. 彡、 |∪| 、`__ )─┛
/ / ヽ ヽノ /_/:::::/
|::::::::::| / ( ̄ ̄ ̄ヽ |:::::::| ̄
|::::::::::| |  ̄ ̄ヽ .ノ |:::::::| /
/ ̄ ̄旦 ̄ ̄ ̄ ̄ ̄ ̄ ̄/|/
/__________/ | |
| |-------------------| |
504:デフォルトの名無しさん
07/02/25 09:49:35
これは分かりやすいw
505:デフォルトの名無しさん
07/02/25 12:04:29
GJ!!
506:デフォルトの名無しさん
07/02/26 08:23:38
>>502
それがちょっと違う。
たとえば
A → B → C という2つの射があったときに
ここでA → Cという上の2つの射の*合成*が定義されてなかったら圏にならない。
すべてのコドメインとドメインが一致する射の組について合成が定義される
場合について、その全体を圏と呼ぶことが出来る。
↑のAAもがんばってくれw
507:デフォルトの名無しさん
07/02/26 19:20:21
オーム社から「クマでわかる圏論」マダー?
508:デフォルトの名無しさん
07/02/26 23:59:49
>>506
あー、なるほどね。そういう条件が必要だったのか。
Wikipediaのこの文章をみてちょっと理解しきれなかったんだな。
>圏 C についてその射(と射の合成可能性)だけでも全部わかっていれば、
>そのうちで恒等射になっているものが対象を示しているので著者によっては
>上の公理を満たす射の集まりを持って圏と定義することもある。
恒等射ってのがなんなのかわからん。ググっても出てこないし!
>>507
クマーとかを本に使って金もらうと炎上しそうだなw
509:デフォルトの名無しさん
07/02/27 02:24:05
クマーはGPLってことで
510:デフォルトの名無しさん
07/02/27 03:06:50
>>508
恒等射っていうのはドメインとコドメインが等しくて、
何回合成してもそれ自身と等しくなるような射。
圏のすべての対象について、一個ずつ恒等射があること
が必要。逆に言うと、恒等射があるとそれに対応する
対象がちょうどひとつあるので、恒等射と対象は
1対1に対応している。(したがって、人によっては、恒等射を
対象そのものとみなすって言うのが↑の記事、、
511:デフォルトの名無しさん
07/02/27 03:15:03
>>510
冪等射と恒等射は別じゃないか?
512:デフォルトの名無しさん
07/02/27 04:11:06
あ、そうだわ、・・・集合の圏とかだと冪等射がたくさん・・・orz...
だから、上の条件にプラスして、他の任意の合成可能な射
と合成して相手を変化させないという条件も必要。
ちゃんと書くと、
1:A→Aという射で他の任意の射
f:A→Bと合成して、f1=f
g:C→Aと合成して、1g=g
となるようなもの、・・・
513:デフォルトの名無しさん
07/03/18 18:43:55
臨時あげ
514:デフォルトの名無しさん
07/03/18 18:46:41
ここで、Stringableの是非を議論すればいいのか?
515:デフォルトの名無しさん
07/03/18 18:47:12
馬鹿が本スレ埋めやがったな
516:デフォルトの名無しさん
07/03/18 18:47:46
止めれw
次スレが立つまでの避難所ということで
517:デフォルトの名無しさん
07/03/18 18:54:27
よく読むとアンチスレなのにまともな議論されてるなw
518:デフォルトの名無しさん
07/03/18 19:01:05
スレリンク(tech板)
立てた。
519:デフォルトの名無しさん
07/03/18 19:07:59
>518
乙!
520:デフォルトの名無しさん
07/03/25 15:03:44
型が充実してるって言うから、ちょっと勉強してみたけど、
簡単に実行時例外が発生するじゃん。なんだよこれ。
コンパイルが通れば論理的な誤り以外、
ほとんどバグが取れてるのかと思ったのに。
実行時に読み込むデータとかの誤りなら仕方ないにしても、
そんなのない静的にすべて決まってるプログラムでも
実行時例外が起きえるなんて、全然だめじゃんwww
521:デフォルトの名無しさん
07/03/25 19:04:34
>>520
ボトムのことかな?
522:デフォルトの名無しさん
07/03/25 21:12:50
>>520
例外を起こす可能性のある関数を使わなきゃいいんじゃない?
あるいは、もっと型の強い言語を使ったらどうよ。
523:デフォルトの名無しさん
07/03/25 21:53:28
暗黙でも何でも良いから
関数毎の定義域に合ったサブタイプを作るとか、
なんとかならんのかね。
もっと型の強い言語ってどんなの?
524:デフォルトの名無しさん
07/03/26 01:54:12
Cじゃね。
525:デフォルトの名無しさん
07/03/26 10:33:01
Cほど型の緩い言語もないだろ。
526:デフォルトの名無しさん
07/03/26 10:43:07
Cは緩いけど硬直的
527:デフォルトの名無しさん
07/03/26 16:44:20
Dじゃね。
528:デフォルトの名無しさん
07/03/26 17:44:47
void*
529:デフォルトの名無しさん
07/03/26 23:35:13
日本拳法が一番厳格だと思うよ
530:デフォルトの名無しさん
07/03/27 20:05:02
あんまり深く使い込んだわけじゃないけど
俺が出会ったランタイムエラーは
パターンマッチの場合分けの漏ればかりだった。
型がらみで実行時エラーってでる可能性はあるの?
531:デフォルトの名無しさん
07/03/27 20:40:55
>>523
>もっと型の強い言語ってどんなの?
依存型のある言語とかじゃないか?実用化されてるのか知らんけど。
>>530
head []とかdiv 1 0とか。
532:デフォルトの名無しさん
07/03/27 20:45:02
計算停止性を決定可能にした天才の>>520がいると聞いて飛んできましたよ。
533:デフォルトの名無しさん
07/03/27 21:19:17
依存型って型に普通の値を突っ込めるようなもの?
とすると類に普通の型が混ざるわけ?
534:530
07/03/27 21:26:28
>head []とかdiv 1 0とか。
div 1 0は型エラーじゃないじゃん。
head []も型システムの責任なのかい?
そうか
型に値域を限定する機能があればいいのか?
div :: (Num a) (Num b:ただし0を除く) => a -> b -> a
head :: [a] ただし[]を除く
みたいな。
でもどうやっても静的にはチェックできそうにない orz
535:デフォルトの名無しさん
07/03/27 21:59:15
{-# OPTIONS_GHC -fglasgow-exts #-}
data ZeroT = ZeroT
data SuccT a = SuccT
data Nat n where
Zero :: Nat ZeroT
Succ :: Nat n -> Nat (SuccT n)
data List a n where
Nil :: List a ZeroT
Cons :: a -> List a n -> List a (SuccT n)
myhead :: List a (SuccT n) -> a
myhead (Cons x xs) = x
mydiv :: Nat n -> Nat (Succ m) -> {- ...型が書けねえ -}
536:保守
07/05/26 18:36:56
破壊的代入を使ったら負けかなと思う
537:デフォルトの名無しさん
07/05/27 20:43:18
勝ち負けを意識した時点で既にアンタ負けてるよ
538:デフォルトの名無しさん
07/05/27 23:19:22
>…負けてるよ
って言ってるアンタも勝ち負けを意識してるんだから、負けてるよ。
539:デフォルトの名無しさん
07/05/27 23:32:17
俺みたいな奴は勝つ必要なんてねえんだよ
540:デフォルトの名無しさん
07/05/30 21:02:25
勝とうよ。haskellがあれば勝てるよ
541:デフォルトの名無しさん
07/05/31 00:08:21
けどHaskellって正直なところ負け組だよ
542:デフォルトの名無しさん
07/05/31 02:59:58
関数型言語パスカル
543:デフォルトの名無しさん
07/05/31 03:24:30
>>543
544:デフォルトの名無しさん
07/05/31 03:25:27
>>544
545:デフォルトの名無しさん
07/08/22 21:16:38
ふつケル読んだけど、後半が理解できなかった。マジで難しい。
言語の設計の根っこがCPUの挙動にぜんぜん当てはめられていないからか、
俺には宇宙語だよこりゃ…。
546:デフォルトの名無しさん
07/08/22 21:36:33
当てはめられないかもしれないが
C言語もCPUの挙動に当てはめられるかというとそうでもない
そもそもソフトウェア設計用だからな
547:偉そうに語ってみる
07/08/23 01:19:28
>545
後半、モナドやWikiエンジンの開発のところは急に難易度が上がっているので、
それより前の部分を何度も読んで動かしていると感じがつかめてくると思います。
あとは、メモリとかスタックとか、効率のことを考えるのをひとまずやめて
プログラムでどういうことをやりたいかを考えてみるのはどうでしょうか。
548:デフォルトの名無しさん
07/08/23 02:46:56
おまえ偉そうだぞ
549:デフォルトの名無しさん
07/08/24 01:14:22
えっへん
550:デフォルトの名無しさん
07/08/24 09:02:27
つ[龍角散]
551:デフォルトの名無しさん
07/08/27 13:01:13
>>550
龍角散は「ゴホン!」だろ
エヘン虫にはヴィックスドロップ。
552:デフォルトの名無しさん
07/08/28 09:39:44
高度すぎてわからなかった^^;;
553:デフォルトの名無しさん
07/09/15 23:11:49
クマーが圏論を語ってる、、、。
554:デフォルトの名無しさん
07/09/15 23:12:36
MLと比べてどうなの?
555:デフォルトの名無しさん
07/10/08 21:16:41
クマー落ち防止保守
556:デフォルトの名無しさん
07/10/20 02:30:14
URLリンク(2ch.bluesvirus.com)
557:デフォルトの名無しさん
07/11/14 16:25:03
>>10
頭の中に同型対応になるものがたくさんあるってことだから
少なくともアホじゃないだろう
558:デフォルトの名無しさん
07/11/14 22:27:08
>>557
あの手の輩は「これは非直感的だからウンコ」て台詞の方が圧倒的に多いよ
559:デフォルトの名無しさん
07/11/19 00:28:42
何この良スレ
スレタイでスルーしてて後悔した
560:デフォルトの名無しさん
07/11/20 21:30:08
もっと活用できたらいいんだがなぁ・・・
561:560
07/11/20 21:31:14
>>560
560はスレのことね
562:デフォルトの名無しさん
07/12/11 07:32:07
sage
563:デフォルトの名無しさん
07/12/23 03:41:42
★
564:デフォルトの名無しさん
07/12/23 11:22:42
クマさんのArrow講義マダ?
565:デフォルトの名無しさん
07/12/23 13:33:30
arrow って命令型言語的なフローを書くための機構なんだよね?重要なの?
566:デフォルトの名無しさん
07/12/29 12:23:36
ぶっちゃけ>>8が理解できなくて劣等感にさいなまれた。
でもHaskellをかじったら理解できた。
その経験からつまずいた点を書いてみる。
qsort [] =
qsort (x:xs) =
とqsortの定義が2つ並んでいるのが理解できなかった。
これはHaskellの階乗を見て場合分けだと理解した。
fact 0 = 1
fact n = n * fact (n - 1)
int fact(int n) {
if (n == 0) return 1;
else return n * fact(n - 1);
}
567:566
07/12/29 12:45:46
[]が意味不明だった。
配列を[1, 2, 3]と書くと知って初めて空配列だと理解できた。
(x:xs)が意味不明だった。
他の部分で配列はすべて[]なのにここだけ()なのに違和感があった。
()はfact(n-1)のn-1と同じでx:xsが一つの要素だとくくっていると解釈した。
この辺はC言語だとコンマで区切るような所が空白で区切られているため
意識しないといけない部分だというように感じた。
そして++が配列の結合だと覚えた上で、
x:xs とはxが要素でxsが配列で [x] ++ xs という意味だと解釈した。
qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
の構文木が初見でイメージできなかった。
演算子++の優先度が高いため A ++ B ++ C と3つの配列が結合していると解釈した。
C言語風にqsort(elts_lt_x) ++ [x] ++ qsort(elts_greq_x)と書いてあれば
初見でも自力で解釈できたかもしれない。
>>10のいうように自分の知っているC言語に近いかどうかというバカの壁がある。
だからと言ってC言語を知らない人の方が先入観がなく理解しやすいとは思えないが。
568:デフォルトの名無しさん
07/12/29 12:55:10
>>567
[1,2,3]は配列じゃなくてリスト
配列とリストの違いはググレ
569:デフォルトの名無しさん
07/12/29 12:57:10
文法を知らなきゃ理解できんのは当然だろ
それから、細かいが、
>演算子++の優先度が高い
低い、の間違いだよな?
570:デフォルトの名無しさん
07/12/29 12:58:12
>>10
「自分が知ってるものと似てる」=メタファ
「見たら使い方がわかる」=アフォーダンス
571:デフォルトの名無しさん
07/12/29 12:58:27
配列とリストなんて計算量が違うだけじゃん。
初心者は気にしなくていいよ。
572:デフォルトの名無しさん
07/12/29 13:00:14
>>571
だったらお前はmalloc,freeひたすら繰り返してろ
573:566
07/12/29 13:01:50
>>569
小学校で1+2*3のとき+より*の優先度が高いと習ったと記憶していますが
これはひょっとして大間違いですか?
574:デフォルトの名無しさん
07/12/29 13:03:26
>>573
どこに+と*が出てきてるんだ?
575:デフォルトの名無しさん
07/12/29 13:05:15
>>573
もし(++)の優先度が関数適用より高いなら、
qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
は、
qsort (elts_lt_x ++ [x] ++ qsort) elts_greq_x
と解釈されるはずだよ。
576:566
07/12/29 13:07:20
>>574
Haskellとは関係なくて「優先度が高い」という言葉の定義の確認で、
+と*を比較すると*が優先度が高いという言い回しが正しいかどうかです。
>>575
すみません、それ以前のレベルで、
優先度という言葉の定義があやふやでした。
よく考えたら++の優先度が低いという意味が理解できました。
1+2*3で+は後で計算していますがqsortでの++もそれと同じですね。
混乱してしまってごめんなさい。
577:566
07/12/29 13:14:41
>>568
ご指摘ありがとうございます。
日本語のHaskell本を2冊とも買ったのでよく勉強します。
>>569
それはそうなんですが、自信たっぷりな>>8の書き方を見て、
普通の知能の人間なら文法も含めて推測できるはず
それができない俺はアホだ。
という劣等感を感じたんです。
色々とつまずきましたが、読み方が分かるようになると、
Haskellのインデントの文法はとても美しいと感じられるようになりました。
今まで好きだったPythonが糞に思えてきました。
578:デフォルトの名無しさん
07/12/29 13:18:42
>>577
haskellのインデント(レイアウトのことかな)が美しいと思うのは自由ですが、
ちょっと偉い人の間では嫌っている人もかなりいます
579:566
07/12/29 13:26:18
>>578
はい、レイアウトのことです。
もしお手数でなければ参考までに嫌われている理由をお聞きしたいです。
Pythonのインデントだとコピペの際にずれを直すのが鬱陶しいと思いました。
C言語だとずれていても無視できて、後で自動整形できますからね。
580:デフォルトの名無しさん
07/12/29 14:24:52
>>579
たとえばcaseの中にcaseがあって、それがレイアウトで書かれていると、
インデントが少しずれただけで全く意味が異なる式になってしまうことがあったりするから。
だからhaskellにはブロックで書くこともできるからレイアウトを使わなくても良い。
でもレイアウトが崩れても一つの解釈しかできないところならレイアウトで書いたほうがきれいかもしれないね。
581:566
07/12/29 20:28:26
>>580
なるほど。
レイアウトはExcelで書くのに向いているかもしれないと思いました。
そういえば副作用がない関数型のイメージをワークシートに例えた解説を
どこかで読んだのを思い出しました。
ところでqsort elts_lt_x ++ [x] ++ qsort elts_greq_xの演算子の件ですが、
単純に左から右にパースして優先度は関係ないのではないかと気付きました。
静的に型付けされているため、qsortの引数は1つしかないと決められるからです。
582:デフォルトの名無しさん
07/12/29 21:35:33
>>581
ヒント: カリー化
583:デフォルトの名無しさん
07/12/29 21:38:18
関数型言語初心者はマジでMLかOCamlから始めろよ
いきなりHaskellやったってわからねーだろ。
584:デフォルトの名無しさん
07/12/29 22:04:56
つ「Haskell The Craf tOf Functional Programming」
↑大学の教科書になってるHaskell使ったプログラミング自体の入門書だから
いきなりやってもわかるようにできてる
この本だとモナドが最後のほうになるまででてこないから
ふつうのHaskellプログラミングと併読してもいいやも
585:デフォルトの名無しさん
07/12/29 22:16:31
SML とか OCaml は(頑張れば宣言的に書く事も可能な)手続き型言語だからね
「副作用も何のその。非正格性なんて、速度を犠牲にしてまで要らないよ。
主題はメタランゲージなんだから、関数型言語なんてレッテルを貼らないでおくれ。」
という世界。
586:デフォルトの名無しさん
07/12/29 23:51:39
>>585
というか、CAML開発の時点で「妥協の産物」と開発者自らが語っている。
その後継のOCAMLでレッテル貼る貼らないとか以前の問題。
その点、SMLはHaskellと同じで純粋培養した関数型っていう感じがする。
NewJergyとかいいな。
でもあえてGauchを薦めてみるw
Lisp/Scheme Familyは楽しいぞ。古きを尋ねて新きを知るという感じかな。
587:デフォルトの名無しさん
07/12/30 00:13:17
SchemeならMonaがアツい
OS開発も一緒に楽しめて一石二鳥
588:デフォルトの名無しさん
07/12/30 00:24:56
>>586
×Gauch
○Gauche
589:デフォルトの名無しさん
07/12/30 00:27:19
>>587
Reading Gaucheなんてのをやってるな
URLリンク(wiki.monaos.org)
590:デフォルトの名無しさん
07/12/30 00:29:24
Scheme は R6RS が好きになれん...
591:566
07/12/30 00:45:12
>>582
qsortが単独で切り出されてC言語でいう関数ポインタみたいなものとして
扱われないという事実をどう解釈するかということでしょうか?
確認実験をしてみました。
inc n = n + 1
add a b = a + b
inc 2 + inc 5 → 9 (+がincより低い)
add inc 2 inc 5 → エラー (addとincが同列のため)
add (inc 2) (inc 5) → 9 (明示的に差をつける)
もし++が同列なら以下の記述を強制されそうですね。
(qsort elts_lt_x) ++ [x] ++ (qsort elts_greq_x)
括弧なしのポーランド表記とは違うのだと理解しました。
>>583
はい、しょっぱなのクイックソートからつまずきました。
実はHaskellの前に英語の本を買ってF#をやっていたんですが、
C#とパラダイムが違うという実感が湧きませんでした。
C# 3.0でラムダ式を使えばF#いらないなー、みたいな。
そんなとき、Haskellのレイアウトが美しいと気付いたんです。
592:デフォルトの名無しさん
07/12/30 00:53:15
関数型を使うならcurryingとmonadぐらいは理解してないと使いこなせないんじゃないかな。
593:デフォルトの名無しさん
07/12/30 01:02:58
式が二つ並んでいたら関数適用になるってことはわかってるかな
C っぽく書くと
inc 2 + inc 5 → +(inc(2))(inc(5))
add inc 2 inc 5 → add(inc)(2)(inc)(5)
add (inc 2) (inc 5) → add(inc(2))(inc(5))
594:デフォルトの名無しさん
07/12/30 01:38:25
>>591
あなた、一度でもリファレンスに目を通しましたか?
最初から最後まで一読してから、わからないことがあれば質問してください。
595:デフォルトの名無しさん
07/12/30 01:39:04
幸運なことに、リファレンスは日本語化されています。
596:566
07/12/30 01:41:46
お騒がせしてすみません。
自分にHaskellは無理のようです。
色々と教えていただいてありがとうございました。
597:デフォルトの名無しさん
07/12/30 01:48:44
アンチを増やしてどうするw
598:デフォルトの名無しさん
07/12/30 01:51:30
この程度で挫折するようなカスのことなぞ知らん
599:デフォルトの名無しさん
07/12/30 01:52:27
rubyコミュの二の舞はごめんだからな。
600:デフォルトの名無しさん
07/12/30 02:05:39
Haskellユーザが増える→Haskellコミュの質低下→Haskellユーザ全体の技術力低下→オブジェクト指向化→Haskellはオブジェクト指向と親和性が低い→Haskellはダメ言語→Haskellコミュ衰退→乙
601:デフォルトの名無しさん
07/12/30 02:07:20
Haskell衰退の他のシミュレーションよろ
602:デフォルトの名無しさん
07/12/30 02:10:02
>>601
お前566だろ?
さっそく門前払いを逆恨みか
603:デフォルトの名無しさん
07/12/30 02:15:32
>>600
オブジェクト指向化したのがConcurrent Cleanじゃね?
604:デフォルトの名無しさん
07/12/30 02:24:04
関数型初心者はカリー化・モナド・遅延処理ぐらいまで理解してから始めてホスイ。
Cみたいなeager evaluationとHaskellみたいなLazy evaluationでは違うのだよ。
605:デフォルトの名無しさん
07/12/30 02:24:39
>>603
それは勘違い
606:デフォルトの名無しさん
07/12/30 02:24:46
>>603
いやOZだ。
607:デフォルトの名無しさん
07/12/30 02:33:52
急にスレが伸びてると思ったら基地外が暴れてたのか
608:デフォルトの名無しさん
07/12/30 02:52:45
冬だな
609:デフォルトの名無しさん
07/12/30 09:30:40
スレタイどおりの糞オナニー言語ですな
610:デフォルトの名無しさん
07/12/30 10:47:28
rubyは原理主義者がウザい
611:デフォルトの名無しさん
07/12/30 12:03:29
>>610
原理主義って・・・もともとrubyは学者でもない一プログラマが実用主義の下に作った言語だろ?
rubyの原理主義とはなんだ?
612:デフォルトの名無しさん
07/12/30 12:04:34
自分の胸に手を当ててみ
613:デフォルトの名無しさん
07/12/30 12:05:09
貧乳がありました
614:デフォルトの名無しさん
07/12/30 12:06:55
ツルペタょぅι゛ょキタ━━(゚∀゚)━━!!!!
615:デフォルトの名無しさん
07/12/30 17:00:47
>>585
>「副作用も何のその。非正格性なんて、速度を犠牲にしてまで要らないよ。
>主題はメタランゲージなんだから、関数型言語なんてレッテルを貼らないでおくれ。」
非正格性=non-Strictness=Lazyness
わざわざ非正格性なんて判りにくい言い方をするのモナーw
616:デフォルトの名無しさん
07/12/30 17:06:28
専門用語使うのがかっこいいと思ってる初心者さんなので許してあげてください。
617:デフォルトの名無しさん
07/12/30 17:15:22
「正格性」の反対語なんだぜ!って感を表現したかったんじゃないの
怠惰性とか遅延性って表現はなんか違和感が
618:デフォルトの名無しさん
07/12/30 17:26:53
そんなどうでも良い所を突っ込まれるとは思わなかった…
619:デフォルトの名無しさん
07/12/30 17:27:19
電子工学から入った俺にしてみれば、副作用なしの関数の方がはるかに直感的だったよ。
習い始めのころでもC言語は別に難しくはなかったが、新しいことを学ぶ気持ちだった。
関数型言語で初めて今まで培った勘が役に立った感じがする。
本来のオブジェクトって言ったら抵抗とかコンデンサとかみたいに副作用がないもののはずなんだがなぁ。
なんでオブジェクト指向って言葉が根付いたのが手続き型言語の世界なんだろう。
いや、歴史的経緯は知ってるけど、納得できない。
620:デフォルトの名無しさん
07/12/30 17:39:19
>>618
研究者の端くれなら尚更判りやすい表現を心がけるべきかと
621:デフォルトの名無しさん
07/12/30 17:41:16
>>620
なんで研究者だと思うんですか?
622:デフォルトの名無しさん
07/12/30 17:52:21
>>619
>なんでオブジェクト指向って言葉が根付いたのが手続き型言語の世界なんだろう。
関数型ではファンクターで抽象化できるからオブジェクト化が必要とされることがあまりなかったから。
手続き型では抽象化の方法がオブジェクト化に求められたが、これを関数型にポートする際にオブジェクト指向の関数型が必要とされた。
手続き型で蓄積された資産がすごい勢いでオブジェクト指向の関数型OCAMLにポートされつつあるからM$もF#を出す気になった。
こういった資産のひとつがOCAMLのocsigen。OCAML版Ruby on Railsのパクリ。
他にも、GaucheのKahuaもそれ系。
これらが関数型の世界でどんな進化をするのか興味深い。
623:デフォルトの名無しさん
07/12/30 17:58:15
F#はファンクターが無い訳だがw
624:デフォルトの名無しさん
07/12/30 18:01:39
Apple=>Ruby/Objective-C
Micro$oft=>F#/Visual-???
Unix=>Gauche/Haskell/etc