[過去ログ] 関数型プログラミング言語Haskell Part7 (1001レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
902: デフォルトの名無しさん [sage] 2007/09/21(金)22:16
Control.Parallel.Strategies.force :: (NFData a) => a -> a
を使うのかな。
これはこれで目的外使用な気もするが。
903: デフォルトの名無しさん [sage] 2007/09/21(金)23:04
>>899
処理系がタコなせいで遅いのなら、そっちを直すべきじゃね?
904: 886 [sage] 2007/09/21(金)23:41
>>895
-prof付きでコンパイルしてから+RTS -p付きで実行するとプロファイルがとれて、
Fri Sep 21 23:19 2007 Time and Allocation Profiling Report (Final)

main.exe +RTS -p -RTS

total time = 0.05 secs (1 ticks @ 50 ms)
total alloc = 9,079,028 bytes (excludes profiling overheads)

COST CENTRE MODULE %time %alloc

main Main 100.0 0.3
qsort Main 0.0 99.1
というようなログが出力される。
total allocとか%allocはこれのこと。
total allocはアロケートされたメモリの累計で、%allocは各関数ごとの割合。

とまあそういうことなんだけど、ここでの議論は、GCでメモリが再利用されて
O(n)になるという話なので、無意味と言うか、的外れと言うか、
>>886-887は無かったことにしてください。
メモリ使用量を正しく知る方法は>>888
905
(1): デフォルトの名無しさん [sage] 2007/09/24(月)10:50
> qsort Main 0.0 99.1

消費時間0%…遅延評価のマジックですなあ
906: デフォルトの名無しさん [] 2007/09/24(月)11:13
>>905
いや、プロファイラの精度の問題だろw

>total time = 0.05 secs (1 ticks @ 50 ms)
一個しか標本を取ってないんだから、片方が100%になるのは必然。
907
(2): デフォルトの名無しさん [] 2007/10/01(月)22:33
concatの反対で "AAA BBB CCC" を ["AAA", "BBB", "CCC"] にするにはどうしたらいいの?
parsecというものをimportしてParserを作らないといけないのでしょうか?
908: デフォルトの名無しさん [sage] 2007/10/01(月)22:41
wordsのことかな。
909
(2): 907 [sage] 2007/10/02(火)16:59
ありがとう。それだ。
ふつうのHaskellプログラミングに乗ってないんだ
910: デフォルトの名無しさん [sage] 2007/10/02(火)17:11
それらしい所を漁るといろいろ出てくるね
ghc/libraries/base/Data/ByteString/Char8
911: デフォルトの名無しさん [sage] 2007/10/02(火)20:21
>>909
ざんねん載っているぞ
912: デフォルトの名無しさん [sage] 2007/10/02(火)21:07
>>909
Hoogleで欲しい関数の型を検索してみると割とヒットするよ。
今回はString->[String]。
913
(1): デフォルトの名無しさん [sage] 2007/10/07(日)00:59
Monads 1
http://www.youtube.com/watch?v=9fohXBj2UEI

An introduction to monads including the definition and a look at the monoid monad.
Category Howto & DIY
Tags: category functor monad monoid
914: デフォルトの名無しさん [sage] 2007/10/07(日)17:09
>>913
こんなマニアックなものがあるのか・・・
915
(2): デフォルトの名無しさん [sage] 2007/10/07(日)17:59
eclipseで書いてるんだけどもHaskellパースペクティブが使いにくくてしょうがないYO
モジュール名を’M’から始めないとinvalid_nameとかいわれるのはなぜなんだぜ?
916
(1): デフォルトの名無しさん [sage] 2007/10/10(水)09:37
>>915
Haskellプラグインをどこが作ってるのかは知らないが、
オープンソースなんだろうし、開発を手伝ってきたら?
917: 907 [sage] 2007/10/15(月)22:15
できたー
ありがとう
918: デフォルトの名無しさん [sage] 2007/10/17(水)06:53
>>915-916
EclipseFP ?
http://eclipsefp.sourceforge.net/
919: デフォルトの名無しさん [sage] 2007/10/20(土)02:31
http://2ch.bluesvirus.com/reserve/view/173
920: デフォルトの名無しさん [sage] 2007/10/20(土)13:24
HaskellでRubyやLispのrestパラメータのように
複数の引数をまとめてリストにしたい場合はどうするのでしょうか?
921
(1): デフォルトの名無しさん [sage] 2007/10/20(土)13:53
可変個の引数をとる関数は定義できない。
型クラスを使って真似する方法はあるけど。
922
(2): デフォルトの名無しさん [sage] 2007/10/20(土)20:58
>>921
> 定義できない
> 方法はある

どっちなんだ
923: デフォルトの名無しさん [sage] 2007/10/20(土)21:06
>>922
できない。似たようなことをする方法はある。
924: デフォルトの名無しさん [sage] 2007/10/20(土)21:24
やりたいことにもよるんだけど、直接リストにして受け渡すようにすれば良いんじゃない?
hoge :: 任意個のa -> b ではなくて hoge :: [a] -> b
引数の型が違う時は
data Param = PInt Int | PString String
hoge :: [Param] -> b
みたいな感じ。
925
(2): デフォルトの名無しさん [] 2007/10/21(日)22:36
今Programming in Haskellを読んでいます。
List comprehensionという語の日本語訳が難しいのですが
普通はどう訳されているのでしょうか?
926: デフォルトの名無しさん [sage] 2007/10/21(日)22:40
>>925
リスト内包表現

っていうかぐぐれよ
927: デフォルトの名無しさん [sage] 2007/10/21(日)22:40
>>925
リストの内包表記
928: デフォルトの名無しさん [sage] 2007/10/21(日)23:26
GHCタッグリーグ戦にあのチームが緊急参戦?
929: デフォルトの名無しさん [sage] 2007/10/21(日)23:54
包茎珍宝のリスト
930: デフォルトの名無しさん [sage] 2007/10/22(月)22:53
なぁなぁ
まえにPDFうpしてくれた人の作品じゃないか?
背景がまったく同じだ

http://www.nicovideo.jp/watch/sm1324200

 
931: デフォルトの名無しさん [sage] 2007/10/22(月)22:58
同じプレゼンソフトを使ってるだけじゃないか?
932: デフォルトの名無しさん [sage] 2007/10/23(火)00:59
xmonadがニュースになってるw
http://japan.zdnet.com/oss/story/0,3800075264,20359294,00.htm
933: デフォルトの名無しさん [sage] 2007/10/23(火)20:35
>>922
Text.Printfを見てみるといい。(単に可変個の引数の話だけど)
934
(1): デフォルトの名無しさん [sage] 2007/10/23(火)22:05
どこで見れる?
935: デフォルトの名無しさん [sage] 2007/10/23(火)22:23
http://darcs.haskell.org/libraries/base/Text/Printf.hs
936
(1): デフォルトの名無しさん [sage] 2007/10/23(火)22:47
昨日ふつける読み始めた俺に誰か教えてくれ
Cと連携したりできんの?
CからHaskellの関数呼んだりHaskellからCの関数呼んだり
937: デフォルトの名無しさん [sage] 2007/10/23(火)22:49
>>934
ソースのことだと思われ
938
(1): デフォルトの名無しさん [sage] 2007/10/23(火)23:03
>>936
できるよ。
939
(1): デフォルトの名無しさん [sage] 2007/10/23(火)23:04
>>938
どーやって?
CとHaskellって型とかだいぶ違う気がするけどそこらへんどーすんの?
940
(1): デフォルトの名無しさん [sage] 2007/10/23(火)23:15
>>939
haskell ffiでググレ
941: デフォルトの名無しさん [sage] 2007/10/23(火)23:17
>>940
あまりの優しさにチンコ取れた
ありがとー読んでくる
942: デフォルトの名無しさん [sage] 2007/10/24(水)20:47
http://www.mitsuki.no-ip.com/~seagull/software-archives/hs-clearsilver/

Clearsilverのバインディングなんてあったんだな
943
(1): デフォルトの名無しさん [sage] 2007/10/26(金)19:43
誰かHaskellの文法一覧みたいな便利なものがあるサイト知らない?
944
(2): デフォルトの名無しさん [sage] 2007/10/26(金)19:56
日本語 → http://www.sampou.org/haskell/report-revised-j/
英語 → http://haskell.org/onlinereport/
945
(1): デフォルトの名無しさん [sage] 2007/10/26(金)21:09
>>944
思慮が足りないな。
仮にもhaskellに興味を持つような人間がそのサイトを知らないわけないだろ。
>>943が言いたいのはそのサイトが不便だってことなんだろうよ。
946
(1): デフォルトの名無しさん [sage] 2007/10/26(金)21:26
>>944
流石にそれは見たことあるわ

>>945
そうそう
もっと適当にまとまってるとこねぇかな
ふつける読み返したり>>944見たりするのはめんどくさい…
947
(1): デフォルトの名無しさん [sage] 2007/10/26(金)22:19
>>946
言い出しっぺの法則。というわけで、wikiでも建てて作ってくれ。
948: デフォルトの名無しさん [sage] 2007/10/26(金)22:31
>>947
http://vipprog.net/wiki/prog_lang/haskell.html
949
(1): デフォルトの名無しさん [sage] 2007/10/26(金)23:28
case x of { "a" -> 1; "b" -> 2}

はうまくいくのに

str1 = "a"
str2 = "b"
case x of { str1 -> 1; str2 -> 2}

は、str1,str2がwildcardとみなされ、意図通りに動きません。
caseのpatternに変数を使う方法はないでしょうか?

ちなみに意図しているのは、以下と等価な動作です。

if x == str1 then 1 else if x == str2 then 2 else error ""
950: デフォルトの名無しさん [sage] 2007/10/27(土)02:37
CやJavaのswitch文でcaseに変数使えたっけ?
951
(1): デフォルトの名無しさん [sage] 2007/10/27(土)03:42
無理だとと思う、代わりにこんなのは?(あんまりまっとうな回答ではないのでわからなければスルー希望)
--source1.hs
Module Source1 (str1,str2) where

str1 = [| "a" |]
str2 = [| "b" |]

--source2.hs

import Source1

case x of { $(str1) -> 1; $(str2) -> 2}
952: デフォルトの名無しさん [sage] 2007/10/27(土)08:43
なんで調べもせずに言い出しっぺとか言ってるんだよ
Tour of the Haskell Syntax
http://cs.anu.edu.au/Student/comp1100/haskell/tourofsyntax.html
953: デフォルトの名無しさん [sage] 2007/10/27(土)08:57
>>951
[| "a" |]の型はQ ExpであってQ Patじゃない。
そもそもパターンにspliceを書くことはできないはず。
954: デフォルトの名無しさん [sage] 2007/10/28(日)02:29
>>949 の意図と違うとは思うけど

table = [(str1,1),(str2,2)]
fromMaybe (errror "") $ lookup x table
955
(3): デフォルトの名無しさん [sage] 2007/10/28(日)12:22
関数型初体験してみたが、
ふたつの引数 m n をとって
m * (m+1) * .... * (n-1) * n を返す関数を
再帰的定義を用いて書け

なんて問題を解くのに30分もかかった…
普段とぜんぜん違う思考法を要求されて面白いねこれ
956: デフォルトの名無しさん [sage] 2007/10/28(日)12:23
>>955
Haskellやると頭がよくなった気がする。あくまで気がするだけだけど・・・。
957
(3): デフォルトの名無しさん [sage] 2007/10/28(日)13:41
とりあえず、ふつうのHaskellは読んで文法とか何となく理解したのですが、
次のステップってどんなのがいいんでしょうか。

自分はWebアプリを実装してみようとか思ったんですけど、基本部品(Http
リクエスト解析とか、DB処理など)使ったものやるよりも、「Write Yourself a
Scheme in 48 Hours」みたいなのを勉強する方がよいのかな?と思ってます。

おすすめのHaskell学習資料なんかがあったら教えてください。
958: デフォルトの名無しさん [sage] 2007/10/28(日)14:05
>>957
まだHaskellであまりコードを書いてないなら、とにかくたくさん書いて慣れるのが重要だろう。
インタプリタ書くのは良い訓練だけど、やりたいことがあるならそっちをやった方が
モチベーションが上がりやすくて良いと思う。
959: デフォルトの名無しさん [sage] 2007/10/28(日)14:05
>>957
散々過去に同じ質問が出ているわけだが。

論文読め。
960: デフォルトの名無しさん [sage] 2007/10/28(日)14:28
>>957
2に書いてある入門Haskellがおすすめ。
あとは、下記のやさしいHaskell入門かな。

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

そろそろもう一段階上の本を出してほしいなぁ > 著者さん達
961: デフォルトの名無しさん [sage] 2007/10/28(日)14:41
皆さん、ありがとうございます。

自分の経験から、あまり文法一覧を基本にした学習ではなくて、実際の
アプリ実装ベースでの学習をしたいと思ってます。目標はWebアプリの
雛形作ることなんですけど、既存コードの寄せ集めになってしまいそう
なので、Haskellのくせというか、定石みたいなの知った上でやりたいなと。

Write Yourself a Scheme in 48 Hoursみたいなのがいいんですけど、
似たようなの他にもあるかなぁと思って質問しました。
962: デフォルトの名無しさん [sage] 2007/10/28(日)14:45
haskellはやめておけ。
プログラミング手法が確立されていないから、
研究目的以外でやるなら別の言語を使え。
963
(2): デフォルトの名無しさん [sage] 2007/10/28(日)19:33
定石なら、
どう書く?org
http://ja.doukaku.org/
とか、
Programming:玉手箱
http://www.sampou.org/cgi-bin/haskell.cgi?Programming%3a%b6%cc%bc%ea%c8%a2
が参考になるかも
964: デフォルトの名無しさん [sage] 2007/10/28(日)20:00
のぶすんすんすん
965: デフォルトの名無しさん [sage] 2007/10/28(日)20:00
のぶすんのおなにーさいと
966
(1): デフォルトの名無しさん [sage] 2007/10/28(日)20:22
>>963
nobsun乙wwwww
967
(1): デフォルトの名無しさん [sage] 2007/10/28(日)20:34
>>966
>>963はただのNAIST生ですよ
968
(1): デフォルトの名無しさん [sage] 2007/10/28(日)20:37
>>955
お前頭いいな。
(m+1) * .... * (n-1)
俺には、この省略されたところで何があったのか見当もつかん。
m+1<n ってことか?
969: デフォルトの名無しさん [sage] 2007/10/28(日)20:44
>>968
俺が察するに、m<nとして m, m+1, m+2, m+3, .. , n-3, n-2, n-1, n の乗積を求めたいんだろう。
970: デフォルトの名無しさん [sage] 2007/10/28(日)21:16
>>967
意味分からん
971
(1): デフォルトの名無しさん [sage] 2007/10/28(日)22:08
>>955
その例は、手続き型でも大差ないだろう。

int f(int m, int n)
{
 return m <= n? m * f(m+1,n) : 1;
}
972: デフォルトの名無しさん [sage] 2007/10/28(日)22:10
>>971
手続き型ならforでまわせよ、この豚
973: デフォルトの名無しさん [sage] 2007/10/28(日)22:12
求めるのが「mからnまでの積」ではなく「mからnまでのlist」だと、
CやFortranでは一気に面倒になるね。
974
(1): デフォルトの名無しさん [sage] 2007/10/28(日)22:37
非再帰の方が楽だな。
f m n = foldl (*) 1 [m..n]
975
(3): デフォルトの名無しさん [sage] 2007/10/28(日)23:34
そのfoldlはhaskellでどう定義するのかね。
ああ、foldlはCで書かれてるなんて言わないでね。
976: デフォルトの名無しさん [sage] 2007/10/28(日)23:39
>>975
ghc落として見るが良い
977: デフォルトの名無しさん [sage] 2007/10/28(日)23:47
fl :: (a -> b -> a) -> a -> [b] -> a
fl _ x [] = x
fl fn init (el:la) = fl fn (fn init el) la
978: デフォルトの名無しさん [sage] 2007/10/28(日)23:48
>>975
wwww
アホがいる
979
(2): デフォルトの名無しさん [sage] 2007/10/28(日)23:49
foldlはライブラリにあるんだから実装はどうでもいいだろ
手で再帰を書かなくて済むことが重要
980
(1): デフォルトの名無しさん [sage] 2007/10/28(日)23:50
foldrをゴリ押ししてみた
fr :: (a -> b -> b) -> b -> [a] -> b
fr _ x [] = x
fr fn init (el:la) = fr fn (fn el init) la
981: デフォルトの名無しさん [sage] 2007/10/29(月)00:01
今darcs中
darcs遅せぇ
982: デフォルトの名無しさん [sage] 2007/10/29(月)00:02
>>980
それはfoldrじゃなくてfoldl . flipじゃないか
983
(1): デフォルトの名無しさん [sage] 2007/10/29(月)01:02
>>979
ところが実装を気にするんだよな〜
なにしろ、再帰かどうかが大問題なんだから。
984: デフォルトの名無しさん [sage] 2007/10/29(月)01:13
じゃ自分で作ってみてベンチ両方取ってくらべりゃいいじゃねぇか
985: 979 [sage] 2007/10/29(月)01:19
>>983
大問題って、foldl再帰で実装されているかどうかを初めに問題にしたのは>>975だろ?
foldlが再帰的に定義されていたとしても>>974のfの定義自体は非再帰的なわけで、
>>974はそれをもって「非再帰の方が楽」という言い方をしたんだと俺は理解したんだが
986: デフォルトの名無しさん [sage] 2007/10/29(月)01:49
すみません、私が間違ってました
987: デフォルトの名無しさん [sage] 2007/10/29(月)02:13
いや、俺も間違ってたよ
988: デフォルトの名無しさん [sage] 2007/10/29(月)20:37
そろそろじすれのきせつ!
989
(2): デフォルトの名無しさん [sage] 2007/10/29(月)21:02
なんで
main = do cs <- getContents
    putStrLn cs
はOKなのに
main = do cs <- getContents
<TAB><TAB>putStrLn cs
はダメなの?
990
(1): デフォルトの名無しさん [sage] 2007/10/29(月)21:21
>>989
上もダメじゃないか?
csが(0から数えて)10桁目から始まるから、
二行目のputStrLnも10桁目にないといけない
タブ幅は8と決まってるから、タブ二つでインデントするとputStrLnが16桁目から始まることになる
991: デフォルトの名無しさん [sage] 2007/10/29(月)21:23
そんなゆーづーがきかないのか…
992
(1): デフォルトの名無しさん [sage] 2007/10/29(月)21:33
doの後で必ず改行するようにすれば悩まなくて済むよ
993
(1): デフォルトの名無しさん [sage] 2007/10/29(月)22:10
>>989
main = do { cs <- getContents;
<TAB><TAB>putStrLn cs}
にすればいいじゃない
994: デフォルトの名無しさん [sage] 2007/10/29(月)22:15
>>992
愛してる

>>993
何が悲しくて{}なんぞ使わにゃならんのよ…
995
(1): デフォルトの名無しさん [sage] 2007/10/30(火)02:15
悲しみを { } で包むためさ
996: デフォルトの名無しさん [sage] 2007/10/30(火)07:32
>>995
だれがうまい(ry
997
(2): デフォルトの名無しさん [sage] 2007/10/30(火)14:56
>>990
ふつけるにも書いてなかったんだが、それずっと疑問だった。
Haskellってタブはスペース8個に決め打ちしてるのか?

そもそも等幅フォントじゃなかったらどうすんだとか、エディタ
選ぶ言語なの?
998: デフォルトの名無しさん [sage] 2007/10/30(火)15:03
>>997
等幅フォントでないと正しく見えない。
pythonのレイアウトも同じ。
999: デフォルトの名無しさん [sage] 2007/10/30(火)15:08
 
1000: デフォルトの名無しさん [sage] 2007/10/30(火)16:13
>>997
決め打ちしてる。
>そもそも等幅フォントじゃなかったらどうすんだ
例えば
・do、where、let、ofの後に必ず改行を入れる
・タブを使わない
の二点を守ればどんなフォントでも大丈夫。
1001: 1001 [] Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.026s