関数型プログラミング言語Haskell Part6
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/07(火) 21:24:26http://www.haskell.org/
日本語サイト
http://www.sampou.org/cgi-bin/haskell.cgi
http://shidot.dyndns.org/hs/
過去ログ
関数型プログラミング言語Haskell
Part1 http://pc.2ch.net/tech/kako/996/996131288.html
Part2 http://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 http://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 http://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 http://pc8.2ch.net/test/read.cgi/tech/1149263630/
関連スレは>>2
関連書籍は>>3
・2chの仕様により、行頭の半角スペースは表示されません。
コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
0029デフォルトの名無しさん
2006/11/12(日) 10:23:050030デフォルトの名無しさん
2006/11/12(日) 11:19:010031デフォルトの名無しさん
2006/11/12(日) 11:24:07形式的意味論もなにも、コンパイラとランタイムの
キャスト可否の判定が食い違ってるだけじゃん。
コンパイラ作成者がランタイムと違う実装してポカやっただけ。
本来なら A::compareTo(Object o) が呼ばれる。
ちょっとスレ違いですまん。
0032デフォルトの名無しさん
2006/11/12(日) 11:29:200033デフォルトの名無しさん
2006/11/12(日) 11:47:520034デフォルトの名無しさん
2006/11/12(日) 12:00:42違います。
そもそも理想って何ですか?
0035デフォルトの名無しさん
2006/11/12(日) 12:14:070036デフォルトの名無しさん
2006/11/12(日) 12:20:50だからどんなのが理想なんだよ。
何か目的があってこそ理想があるんだろ?
0037デフォルトの名無しさん
2006/11/12(日) 12:26:15手続き型言語と比べて数式(数学者の脳内)に近いだろ?
だから数学者にとって理想的な言語。俺はそれくらいの意味で書いた。
0038デフォルトの名無しさん
2006/11/12(日) 12:31:590039デフォルトの名無しさん
2006/11/12(日) 13:11:46十分に理想主義的だと思うが。
文字列がコードポイントの遅延リストであるのがその一例。
0040デフォルトの名無しさん
2006/11/12(日) 14:13:38マルチバイト文字をリストの1要素として扱えてる?
0041デフォルトの名無しさん
2006/11/12(日) 14:43:59Prelude> Char.ord maxBound
1114111
0042デフォルトの名無しさん
2006/11/12(日) 14:51:05main = print $ "テスト" !! 1
でもいいか。ソースはUTF-8で。
0043デフォルトの名無しさん
2006/11/12(日) 15:20:58d。内部はUTF-16(的)なのね。
しかし、どうせならUCS4まで扱ってくれれば良いのに。
あんな「思ってたより多かったのでサロゲート作っちゃいました」
とかほざく連中に合わせる必要ないのに・・・。
0044デフォルトの名無しさん
2006/11/12(日) 15:35:53いや、1114111は0x10ffffで、16ビットの範囲を超えていて、
Unicodeの17面を全部表現できる。
UTF-16よりUTF-32に近いはず。
0045デフォルトの名無しさん
2006/11/12(日) 15:50:10ISO(10646) すげーな、頑張れ。でも2byteで大丈夫か?
Unicodeコンソ 大丈夫大丈夫
それぞれ仕様を策定することになる。(コードポイントはお互い合わせてる)
Unicodeコンソ Unicode(未定義含めて全領域は0..0xFFFF)定義しますた。
Unicodeコンソ 実装は固定長2byte(Unicode,のちのUTF-16である)です。
ISO(10646) UCS定義(未定義含めて全領域は0..0x7FFFFFFF)しますた。
ISO(10646) 実装は可変長(UTF-8)と固定長4byte(UCS-4)です。
少しして
Unicodeコンソ (やっべ)
Unicodeコンソ 0xFFFFで足りませんですた。サロゲートペアで拡張しますね。
Unicodeコンソ UTF-16にサロゲートの仕様を追加しますた。
Unicodeコンソ それと固定長(4byte)のUTF-32用意しますた。4byteだけど0x10FFFF以上は使うなよ。
Unicodeコンソ おまけ つ[0x10FFFFまでのUTF-8]
Unicodeコンソ というわけでよろしく。
ISO(10646) 0x10FFFFまでコードポイントを追加しますた。実装は変わりません。
Unicode対応と言いつつ0xFFFFまでしか扱えないソフトが出てくる ← 今ここ
0046デフォルトの名無しさん
2006/11/12(日) 15:54:180047デフォルトの名無しさん
2006/11/12(日) 16:07:08確かにイメージ的には32の方が近いね。実際どういう実装なのかは知らないけど。
内部表現は100進数だったりして・・・。
0048デフォルトの名無しさん
2006/11/12(日) 18:34:50># p.269 kind の訳語は「類」なのか、「種」なのか?
>
> * ふつけるで使っている「類」は、nobsun の訳を元にしているんだろうけど……
> o 数学辞典を調べて、出てきた用語を使ったような
> + 「類」は "Class" じゃないの?
> * Clean では「種」
> * 型理論の方面では「種」が使われている
> * というわけで、以後は「種」を使うことにしましょう
このスレの住人の意見を聞きたいんだが、kindの訳語として「類」と「種」のどっちを使うべき?
0049デフォルトの名無しさん
2006/11/12(日) 18:59:42類は「似た性質/特徴を持つもの」(哺乳類,など)と個人的に思っている。
で、kindの "* -> *" と "*" の区別とかは
「似た特徴」とも言えるが、それ以上に「根源的な部分」を
表しているような気がするので「種」に1票。
属とか科とか似たのもあるけど気にしない。
0050デフォルトの名無しさん
2006/11/13(月) 00:13:440051デフォルトの名無しさん
2006/11/16(木) 20:28:17Haskellでオセロゲーム講座まだー?
0052デフォルトの名無しさん
2006/11/16(木) 21:02:53ふだんごついのに
数学者のかわいい一面ですね。
厳密さが快感だから悩むのでしょうか?
でも、悩むの楽しいのでしょうね^^
0053デフォルトの名無しさん
2006/11/16(木) 21:08:180054デフォルトの名無しさん
2006/11/18(土) 23:17:47i = 1
main = print $ myPlus i
myPlus :: a -> a
myplus j = j + j
これが動かないのはなんで?
0055デフォルトの名無しさん
2006/11/18(土) 23:34:020056デフォルトの名無しさん
2006/11/18(土) 23:37:19+ myPlus
0057デフォルトの名無しさん
2006/11/18(土) 23:38:49+ myPlus :: Num a => a -> a
005854
2006/11/19(日) 00:24:59レスサンクス。コンパイル通ったよ。
でもなにこの「Num a => 」って奴は。haskellは簡単なことが難しいって本当だな。
とりあえず調べてみる。ありがと。
0059デフォルトの名無しさん
2006/11/19(日) 03:00:010060デフォルトの名無しさん
2006/11/20(月) 07:04:540061デフォルトの名無しさん
2006/11/20(月) 20:44:20モナドはたくさんあるけど
0062デフォルトの名無しさん
2006/11/20(月) 21:03:220063デフォルトの名無しさん
2006/11/20(月) 21:08:38ネタを出してくれ
0064デフォルトの名無しさん
2006/11/20(月) 21:12:440065デフォルトの名無しさん
2006/11/20(月) 21:25:36http://homepages.inf.ed.ac.uk/wadler/topics/type-classes.html
http://haskell.readscheme.org/lang_sem.html
http://www.cse.unsw.edu.au/~chak/haskell/ghc/comm/
読み終えたら概要を報告すること.それが君の使命.
0066デフォルトの名無しさん
2006/11/20(月) 21:55:44GHCいれることにしたからWinHugsをアンインスコしようとした
そしたらダイアログでて以下のようなメッセージ
↓↓↓
=============================================================================================
C:\PROGRA~1\WinHugs\UNINST~1.EXE
C:\PROGRA~1\Symantec\S32EVNT1.DLL インストール可能なデバイスドライバはDLL初期化に失敗しました。
アプリケーションを終了するには[閉じる]を選んでください。
=============================================================================================
アンインスコ不可能になた
この前NIS2006を根こそぎ削除したのが原因のようなんだけど
こういう場合どうやったら引き続きアンインスコできんの?
0067デフォルトの名無しさん
2006/11/21(火) 00:20:350068デフォルトの名無しさん
2006/11/21(火) 00:25:44read "-123.456" :: Double
006966
2006/11/21(火) 01:19:160070デフォルトの名無しさん
2006/11/21(火) 05:43:13Symantecとか関係なくWinHugsはなぜかアンインストールできない。
なのでさくっとスクリプトを書いてみようと思ったらひどい目にあった。
なんでマルチバイト文字とCharの相互変換もできないんだよ…
ttp://up.uppple.com/src/up0496.txt
FFIを使う羽目になったので、GHCでコンパイルする必要がある。
あと無保証。BIOSが消し飛んでも関知しないから念のため。
0071デフォルトの名無しさん
2006/11/21(火) 07:09:34それを すてるなんて とんでもない!
0073デフォルトの名無しさん
2006/11/21(火) 23:20:19http://hackage.haskell.org/trac/hugs/ticket/42
認識はされてるけど対策はまだみたいだ。
0074デフォルトの名無しさん
2006/11/21(火) 23:27:38□□■□□□□□■□□□□□□□□□□□□□□■□□□□□□□□□■□□■□□
□□■□□□□□■□□□□□□□□□□□□□□■□□□□□□□□□■□□■□□
□□■□□□□□■□□□□□□□□□■■□□□■□□□□□□□□□■□□■□□
□□■□□□□□■□□□□□□□□■□□■□□■□□■□□■■□□■□□■□□
□□■■■■■■■□□■■■■□□■□□□□□■□■□□■□□■□■□□■□□
□□■□□□□□■□■□□□■□□□■■□□□■■□□□■■■■□■□□■□□
□□■□□□□□■□■□□□■□□□□□■□□■□■□□■□□□□■□□■□□
□□■□□□□□■□■□□□■■□■□□■□□■□□■□■□□■□■□□■□□
□□■□□□□□■□□■■■□■□□■■□□□■□□■□□■■□□■□□■□□
0075デフォルトの名無しさん
2006/11/23(木) 00:35:20ふつうのHaskellプログラミング買って勉強しはじめた
もう一冊のほうは知らんけど、これわかりやすくていいね
007675
2006/11/23(木) 00:35:50http://www.amazon.co.jp/gp/product/4797336021/sr=8-4/qid=1164209589/ref=sr_1_4/250-4437816-3500248?ie=UTF8&s=books
0077デフォルトの名無しさん
2006/11/23(木) 01:28:030078デフォルトの名無しさん
2006/11/23(木) 01:41:12スレがのびへんねん
0079デフォルトの名無しさん
2006/11/23(木) 10:51:460080デフォルトの名無しさん
2006/11/25(土) 02:20:39HaskellにDoxygenのようなドキュメント生成のためのツールなどはありますか?
0081しょしんしゃ
2006/11/25(土) 02:26:37質問です
GHCとHugsという存在がよくわかりません
Haskellが仕様で、GHCとかHugsが実装環境ってこと?
もしそうなら、仕様ってなに?
どっかにそれをタンマリ書いたPDFとか置いてるの?
『Haskell』ってのはただの説明書?
それともLinuxに例えるならHaskellがカーネルで
GHCやHugsがディストリビューション?
やべぇ、余計わかんなくなってきた
0082デフォルトの名無しさん
2006/11/25(土) 03:05:44Haddock
>>81
>Haskellが仕様で、GHCとかHugsが実装環境ってこと?
そんな感じ。
>どっかにそれをタンマリ書いたPDFとか置いてるの?
http://haskell.org/onlinereport/
http://www.sampou.org/haskell/report-revised-j/ (日本語訳)
0083デフォルトの名無しさん
2006/11/25(土) 03:09:04覗いてみたけど眩暈した
>>81のLinuxの例えはあってるかな?
あってるなら納得する
0084デフォルトの名無しさん
2006/11/25(土) 03:29:49GHCのような各処理系は、この定義に沿ってプログラムを解釈するように作られる。
言い替えると、Haskell ReportはHaskell処理系が満たすべき要件を定めている。
Linuxカーネルはディストリビューションが満たすべき要件を定めたりしないし、
カーネル自身がディストリビューションの一部なので、構造がだいぶ違う。
むしろ、POSIXとLinuxシステムの関係に近い。
0085デフォルトの名無しさん
2006/11/25(土) 22:50:340086デフォルトの名無しさん
2006/11/25(土) 23:04:56つーかC++言語だってgccだのMS VC++だのBCCだのいっぱいあって,それで普通じゃん...
HaskellもHugsだのGHCだのいっぱいあるのですぉ
0087デフォルトの名無しさん
2006/11/25(土) 23:31:43一般的なプログラマーならそれで理解できるだろうけど
Javaしか知らんのだよJavaしか!!1
0088デフォルトの名無しさん
2006/11/25(土) 23:36:490089デフォルトの名無しさん
2006/11/25(土) 23:38:200090デフォルトの名無しさん
2006/11/25(土) 23:48:33HTML <-> Haskell98
IE,FF,Opera,etc... <-> GHC, Hugs, etc...
0091デフォルトの名無しさん
2006/11/25(土) 23:55:59え、そんな単純なことなのか
0092デフォルトの名無しさん
2006/11/25(土) 23:57:290093デフォルトの名無しさん
2006/11/26(日) 01:21:32たとえば ghc でコンパイルして
C:\> .\fibonacci.exe 10
55
C:\> .\fibonacci.exe 20
6765
と動作するようなものを書く場合です。
またそれはどのあたりのマニュアルを参照すれば良いでしょうか。
0094デフォルトの名無しさん
2006/11/26(日) 01:25:00hoogleでarg辺りで検索すればgetArgsが出てくる。
0095デフォルトの名無しさん
2006/11/26(日) 01:28:37Haskell98なら
System.getArgs :: IO [String]
階層ライブラリなら
System.Environment.getArgs :: IO [String]
GHCに付属しているライブラリの大部分は
http://www.haskell.org/ghc/docs/latest/html/libraries/
にリファレンスがある。
0096デフォルトの名無しさん
2006/11/26(日) 01:37:36Javaの本ではそんなの読んだことない
0097デフォルトの名無しさん
2006/11/26(日) 01:54:37そんな大嘘が書いているのはどこですか?
Haskellではcharの配列とStringはまったく違います。
また、Javaではchar[] != Stringです。
0098デフォルトの名無しさん
2006/11/26(日) 02:12:41配列ではなくリスト、と言いたいんだよね?
0099デフォルトの名無しさん
2006/11/26(日) 02:21:040100デフォルトの名無しさん
2006/11/26(日) 02:24:30実は、Haskellでは文字列もリストなのです。文字列は文字のリストとして
表現されていて、特別な「文字列」は存在しません。
ですから、リストの処理を覚えれば文字列処理も身につけたことになります。
-----ふつうのHaskellプログラミング
0101デフォルトの名無しさん
2006/11/26(日) 02:24:56Haskellの文字列はCharのリスト(これを [Char] と書き表す)
Haskellでは配列とリストは別のデータ型.
関数型言語では大抵は配列よりリストのほうが頻繁に使われる.
0102デフォルトの名無しさん
2006/11/26(日) 02:28:12>>98がアホってこと?
0103デフォルトの名無しさん
2006/11/26(日) 03:57:26何故?
0104デフォルトの名無しさん
2006/11/26(日) 04:46:570105デフォルトの名無しさん
2006/11/26(日) 07:10:26次のコードは間違っていますか?それとも別の問題でしょうか?
import System.Posix.Files
main = getFileStatus "hoge" >>= (print . isDirectory)
ghciでは、ちゃんと動きました。
hugsで実行しようとすると、次のエラーが出ます。
*** glibc detected *** /usr/bin/hugs: free(): invalid pointer: 0x08f0d120 ***
======= Backtrace: =========
/lib/libc.so.6[0x4a74aefd]
/lib/libc.so.6(cfree+0x90)[0x4a74e550]
/usr/lib/hugs/packages/base/Foreign/Marshal/Alloc.so[0x4ed616]
/usr/bin/hugs[0x80771c6]
/usr/bin/hugs[0x8077bc0]
...
0106デフォルトの名無しさん
2006/11/26(日) 07:10:40つまりHaskellはもはやマイナーな分野ではない。
0107105
2006/11/26(日) 07:11:44ghcでコンパイルしようとすると、次のエラーが出ます。
t.o: In function `sHY_info':
(.text+0x8a): undefined reference to `unixzm1zi0_SystemziPosixziFiles_isDirectory_closure'
t.o: In function `sHW_info':
(.text+0x106): undefined reference to `unixzm1zi0_SystemziPosixziFiles_getFileStatus_closure'
t.o: In function `Main_main_srt':
(.rodata+0xc): undefined reference to `unixzm1zi0_SystemziPosixziFiles_isDirectory_closure'
t.o: In function `Main_main_srt':
(.rodata+0x10): undefined reference to `unixzm1zi0_SystemziPosixziFiles_getFileStatus_closure'
collect2: ld はステータス 1 で終了しました
OSはFedora Core 6
インストールしているパッケージは、
hugs98-2006.09-1.fc6
ghc66-6.6-1.fc6
ghc-6.6-1.fc6
です。
0108105
2006/11/26(日) 07:23:22次のコードが、hugsでは受け付けられるのに、ghci・ghcでは、
hoge.hs:3:10: parse error (possibly incorrect indentation)
などと、エラーになります。
haskellの言語仕様上、下記の記述は許されないということでしょうか?
main = do if True then putStrLn "t"
**********else putStrLn "f"
但し、半角スペースを記号"*"で置き換えています。
0109デフォルトの名無しさん
2006/11/26(日) 09:32:45仕様上正しいかどうかは知らんけど、もう一個スペース入れればghcで受け付けるようになる。
もしくは、この例ではdoは必要ないから外してしまうとghcでもOK。
ghcではdo構文の中ではthenとかelseはifの開始位置よりも右から始めないとダメって事になってるのかも。
0110デフォルトの名無しさん
2006/11/26(日) 09:43:25必要なライブラリをリンクさせてないってことでしょ。
単に ghc hoge.hs としたらhoge.hsだけをコンパイルして標準のライブラリとリンクさせて実行ファイル作るけど、
import System.Posix.Filesをしてるから標準のライブラリには含まれてないものを必要としてて、
それが足りないというエラーが起きてる。
-packge 〜 というオプションをつけて手動で必要なものを指示する方法もあるけど、
--makeオプションを使った方が必要なものを全部自動的に処理してくれるから楽。
ghc --make hoge.hs
0111105
2006/11/26(日) 11:37:13書き換えれば動くのは確かめたのですが、
処理系によって挙動が異なるので、仕様ではどうなっているのか気になっています。
>>110
ありがとうございます。
たしかに、ghcに--makeオプションを指定すると、うまくコンパイルできました。
hugsでは、このライブラリは利用できないのでしょうか?
hugsの実行時に+wオプションを使い、読み込まれるファイルを確認しました。
結果、メッセージは
...
Hugs session for:
...
/usr/lib/hugs/packages/base/System/Posix/Types.hs
/usr/lib/hugs/packages/base/System/Posix/Internals.hs
/usr/lib/hugs/packages/unix/System/Posix/Files.hs
hoge.hs
Type :? for help
Main> main
*** glibc detected *** hugs: free(): invalid pointer: 0x0965eb60 ***
======= Backtrace: =========
/lib/libc.so.6[0x4a74aefd]
/lib/libc.so.6(cfree+0x90)[0x4a74e550]
/usr/lib/hugs/packages/base/Foreign/Marshal/Alloc.so[0xd67616]
hugs[0x80771c6]
...
/lib/libc.so.6(__libc_start_main+0xdc)[0x4a6faf2c]
hugs[0x8049c51]
======= Memory map: ========
...4a8アボートしました
となり、異常終了してしまいます。
0112デフォルトの名無しさん
2006/11/26(日) 12:55:55特定のときにだけ実行するような場合は Monad (または Control.Monad) を
インポートして when か unless を使え。
あと和訳されてるんだし疑問を持ったら自分で仕様を読めば。
http://www.sampou.org/haskell/report-revised-j/exps.html
0113デフォルトの名無しさん
2006/11/26(日) 13:15:46仕様が気になるなら仕様書を読むしかない。
do構文が絡んだ場合のインデントについてまとめてあるのを見つけた。
http://en.wikibooks.org/wiki/Haskell/Indentation
0114デフォルトの名無しさん
2006/11/26(日) 13:16:47if..then..elseは単なる式であって、doの文にするなら一文に収めないといけない。
そのコードだとif...then...とelse...で二文に分かれているので、エラーになるのが正しいはず。
手元のHugs May 2006では
ERROR "test.hs":2 - Syntax error in expression (unexpected `;', possibly due to bad layout)
というエラーになった。
0115114
2006/11/26(日) 13:30:35Hugsのバグかも。
0116デフォルトの名無しさん
2006/11/26(日) 13:34:21明らかにライブラリまたはHugsの問題。コードは悪くない。
0118デフォルトの名無しさん
2006/11/26(日) 17:56:23に書かれている設定で Emacs の haskell-mode を入れてみたんですが、
インデントが正しくなりません。たとえば Yet Another Haskell Tutorial
の p.32 の例を入力すると、
module Main
where
import IO
main = do
hSetBuffering stdin LineBuffering
putStrLn "Please enter your name: "
name <- getLine
putStrLn ("Hello, " ++ name ++ ", how are you?")
となってしまいます。(半角スペース 2 つを全角空白文字に変換しています。)
何か設定がおかしいんでしょうか? それともこういうもの?
0119デフォルトの名無しさん
2006/11/26(日) 19:05:300121デフォルトの名無しさん
2006/11/26(日) 23:15:09それともみんな個人レベルで圏論とHaskellをやっているんですかね・・・
0123デフォルトの名無しさん
2006/11/27(月) 00:24:10いろんなところでやってるでしょ。代表的なのはオックスフォードだけど。
0124デフォルトの名無しさん
2006/11/27(月) 00:44:00orz
0125デフォルトの名無しさん
2006/11/27(月) 01:04:05ていうかこれ去年か。
0126デフォルトの名無しさん
2006/11/27(月) 01:07:320127デフォルトの名無しさん
2006/11/28(火) 17:33:230128デフォルトの名無しさん
2006/11/28(火) 18:48:09■ このスレッドは過去ログ倉庫に格納されています