[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
888: デフォルトの名無しさん [sage] 2011/12/26(月) 23:00:19.71 AAS
表示的意味論の教科書でも大抵入出力は端折ってる。
889: デフォルトの名無しさん [sage] 2011/12/26(月) 23:25:08.69 AAS
>>885885(1): デフォルトの名無しさん [sage] 2011/12/26(月) 20:04:36.55 AAS
>>882
・便利な機能(というより、無いと苦痛な機能)が揃ってる
代数的データ型、型クラス、型推論、…
・構文が簡潔なので書いていて苦痛が少ない(括弧を閉じなくて良いのは大きい)
・静的な型
もっと地味に良いところはたくさん挙げれられる
GC、生ポインタ操作、パーサコンビネータ、ユーザレベルスレッド、並列処理、
do構文、where構文、純粋であること、末尾再帰の最適化、…
でも個人的な感覚としては、他の言語に比べて大きな欠点が少ないから使ってる
そうですか。更に学べば面白いところありそうですね。:-)
>>886886(2): デフォルトの名無しさん [sage] 2011/12/26(月) 20:04:44.07 AAS
>>884
問1. HaskellのタプルとLispのconsの共通点は何?
問2. その共通点は本質的なものか?
自分が感じたのは、便利な小物扱いしてるところ。consを使ったもので
associate listというものがあるんだけど、その扱いと特に似てると感じた。
tupleは無名構造体という言い方をするとどこかで読んだことがあるけど、
もちろんtupleでリストを作るわけではないので違いは歩けd.
890: 878 [sage] 2011/12/26(月) 23:55:02.17 AAS
>>879879(2): デフォルトの名無しさん [] 2011/12/26(月) 10:20:49.85 AAS
>> 878
>モナドとモナド変換子を使ってプログラミング言語の意味を表現しておけば
>そこからその言語のインタプリタを自動生成してくれる
そりゃできるに決まってるよ、と思うのだが、そう思うのってあまりにdetailに
鈍感ってことかなあ?
ところで、このときモナドが本質的(モナドだからできる)ってことでもない
と思うのだが、どうですか?
俺がモナドをよく知らないから新鮮に思えるだけかも
>>887887(1): デフォルトの名無しさん [sage] 2011/12/26(月) 21:40:09.83 AAS
>>878
2時間たらずでそこまで理解できたなら大したもんだ。
自動生成というか、各プログラミング言語の概念(環境、ストア、継続)をモジュール化することで、
レゴのブロックのように意味の組み合わせが可能になる言語の枠組みとして使えるという内容。
いろんな先入観を払拭するのに最適だし。
残念ながら入出力については実装があたえられていないので、言語SLは実践的にはまったく使い物にならない。
逆に言えば、入出力をちゃんと理解して組み込めるようにすれば、実用的にも結構すごいことだと思う。
説明ありがとう
Haskellerがモナドモナドうるさい理由がちょっと解ってきたよ
891: デフォルトの名無しさん [sage] 2011/12/27(火) 00:02:02.11 AAS
うるさくはないよ。控え目だよ。
892: デフォルトの名無しさん [sage] 2011/12/27(火) 04:33:07.77 AAS
うるさくはないよ。針小棒大だよ。
893: デフォルトの名無しさん [sage] 2011/12/27(火) 09:38:15.07 AAS
うるさくないよ。短小早漏だよ。
894: デフォルトの名無しさん [sage] 2011/12/27(火) 12:44:32.22 AAS
>>886
>>884884(2): デフォルトの名無しさん [sage] 2011/12/26(月) 15:54:03.41 AAS
もうひとつ感じたことh,HaskellのタプルはLispのconsみたいなもんなんだな。ってね。consとtupleは違う点ももちろん明確なんだけど。
ではないけど、横レスしてみる
Lispのような動的型付け言語の場合、2つの要素から構成されるタプルと
リスト構成子である cons は同一であり、互いに置き換えることができる
Haskellのような静的型付け言語の場合、
タプルは直積構造であるから各要素のデータ型は互いに異なっていてもかまわないが、
リストにおいては各要素のデータ型は同一でなければならない
したがって、2要素のタプルとリスト構成子との間に互換性はない
895: デフォルトの名無しさん [sage] 2011/12/27(火) 13:38:57.62 AAS
無理矢理なぐらい広議にしたモノイドという観点に立てば関連性が無いとも言えない
896(10): デフォルトの名無しさん [sage] 2011/12/27(火) 19:54:07.22 AAS
cabal で stm をインストールしようとしたら、
Control\Concurrent\STM.hs:0:4: lexical error (UTF-8 decoding error)
というエラーで止まってしまい、インストールできません
そもそも cabal の lexical error というのはどういう時に起こるのでしょうか
[環境]
GHC 7.2.2
cabal-install 0.10.2
Cabal library 1.10.2.0
897(2): 896 [sage] 2011/12/27(火) 23:18:53.79 AAS
問題がだいぶ絞り込めました
{-# LANGUAGE CPP #-}
たったこれだけ書かれた Test.hs ファイルを ghci 上でロードすると、
Test.hs:0:4: lexical error (UTF-8 decoding error)
Failed, modules loaded: none.
と表示されエラーとなりますが、エラーの意味が分かりません
{-# LANGUAGE Arrows #-}
例えばこれだけ書かれた Test.hs ファイルなら、普通にロードできます
これ GHC 7.2.2 のバグでしょうか
それとも意図された振る舞いなのでしょうか
後者なら、このエラーはどのような意味なのでしょうか
898: 829 [sage] 2011/12/28(水) 03:00:47.10 AAS
>>829829(2): デフォルトの名無しさん [] 2011/12/24(土) 11:15:48.48 AAS
cabal updateしようとしたんだけど落ちてる?
なんかタイムアウトしてしまうんだが。
取り急ぎ対応したいんだけど、ミラーとか指定できる?
です。解決しました。
原因はIPv6周りだったらしく、Ubuntuの設定をしたら直りました。
自分の対処法としては。参考にしたサイトとは若干違い。
/etc/ufw/ufw.conf にIPV6の記述がなかったので
IPV6=yesに。
/etc/NetworkManager/system-connections/Auto eth0の[ipv6]のmethodがignoreになっていたのを、
method=autoにそれぞれ変更し直りました。
参考にしたサイト
hackage.haskell.org に繋がるようになりました。 - sirocco の書いてもすぐに忘れるメモ
外部リンク:d.hatena.ne.jp
899: 829 [sage] 2011/12/28(水) 03:12:45.40 AAS
まずプロバイダに特定のサイトが繋がらないんだけど?と連絡したら中の人がぐぐってくれたらしく
ipv6の設定を変えてみてくれという返事が帰ってきました。なんか検索したらそういうものが見つかったとのこと。
ipv6の問題とか自分の身に降りかかってくるとは思ってなかったのでパニクリました。
向こう側がググったサイトは教えてくれない感じで、Windowsでの設定方法を教えますって言われたので、うは、逆にUbuntuでの設定方法を教えてくれwと思いながらWinじゃないので、と言ってとりあえず引き下がって自分で対処しようとすることに。
うわー、面倒くさそうと思って、プロバイダ側で何が引っかかったのだろうとぐぐってみたら1番上が思いっ切りUbuntuの人のページでしたw
ちなみにAndroidケータイがXperiaなんですが、それでもhackageのサイトに通じなかったので、ipv6の設定がどうかなってるんですかね。
Windowsでipv6とかgoogleのグローバル版で調べてみてもあまりipv6と関連した情報みたいなのは出てきませんが。
外人さんは困ったりしないんだろうか。全くよくわからないところです。日本人・日本語だと困ってる人が少し出てきましたね。
で、結局Ubuntuでipv6の設定しなおしたらなんで繋がるようになったのかは理解してません。w
どうしてなんでしょうか?
この方のところも参考にしました。
UbuntuでIPv6 - とある技術屋の戯言
外部リンク:www.sonorilo.net
900(1): デフォルトの名無しさん [sage] 2011/12/28(水) 07:16:43.53 AAS
馬鹿には無理
901: 896 [sage] 2011/12/28(水) 07:35:30.95 AAS
>>900
賢い人でしたら >>897 の問題分かるでしょうか
ちなみに、ghci -XCPP というオプションで ghci を起動させれば、
たとえ何も書かれていない空白の hs ファイルをロードしても、
全く同じ lexical error になります
902(2): デフォルトの名無しさん [sage] 2011/12/28(水) 07:47:55.90 AAS
適当に推測すると、cppの出力が非UTF-8の何かを含んでるんじゃないの?
cpp -traditional Test.hs
の出力を見てみるとか
903: デフォルトの名無しさん [sage] 2011/12/28(水) 07:49:15.11 AAS
まさにそれでした
ありがとうございます
904: 896 [sage] 2011/12/28(水) 07:54:57.28 AAS
>>902
ありがとうございます
色々な ghc のバージョンで試す環境が作れたので、
丁度今試していたのですが、どうも 6.12.3 なら OK で
7.0.0 以上なら NG みたいなんです
もう仕事に向うので、帰宅したら cpp -traditional Test.hs の方を試してみます
905(2): 896 [sage] 2011/12/28(水) 19:09:32.91 AAS
>>902
cpp -traditional Test.hs の結果が以下のように出力されました
-------------------------------
# 1 "Test.hs"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "Test.hs"
{-# LANGUAGE CPP #-}
-------------------------------
何か問題あるでしょうか
906(1): デフォルトの名無しさん [sage] 2011/12/28(水) 19:25:33.17 AAS
>>905
わからん。念のためghci -v Test.hsをやってみて、
そこで出てきたプリプロセスコマンドをそのまま打ち込んでみたら出力はどうなる?
カレントディレクトリかテンポラリディレクトリのパスに日本語が入ってるとか
907: 896 [sage] 2011/12/28(水) 19:58:14.00 AAS
CPP 言語オプションだけを記述した Test.hs に対して ghci -v Test.hs すると、
*** C pre-processor: でプリプロセスコマンドが表示され、
その直後に次のように表示されて処理が止まります
ghc.exe: fd:5: hGetContents: invalid argument (invalid UTF-8 byte sequence)
ここで、[Ctrl+C] キーで処理を止めると Interrupted. と表示されてから、
いつもの ghci のプロンプトになります
Arrows 言語オプションだけを記述した Test.hs ファイルの場合は、
全く問題なく(処理は止まらず)いつもの ghci のプロンプトになります
*** C pre-processor: で表示されたプリプロセスコマンドは以下の通りです
(見やすさの為適当に改行を入れ、パスに本名がローマ字で入っているので伏せました
また、最後の -o の出力パスはテンポラリファイルなので適当に変えました)
-------------------------------
"Haskell Platform2011.4.0.0のフォルダ\lib\..\mingw\bin\gcc"
-E -undef -traditional -v
-I "Haskell Platform2011.4.0.0のフォルダ\lib\base-4.3.1.0\include"
-I "Haskell Platform2011.4.0.0のフォルダ\lib/include"
-D__GLASGOW_HASKELL__=700 -Dmingw32_BUILD_OS=1 -Di386_BUILD_ARCH=1
-Dmingw32_HOST_OS=1 -Di386_HOST_ARCH=1 -x c Test.hs -o out.hscpp
-------------------------------
このプリプロセスコマンドを実行してみたところ、
こちらは止まらず、また特にエラー報告もなく out.hscpp が出力されました
このファイルの内容は >>905 の結果の出力と同一です
どうも、この現象は私だけみたいですね
908: 896 [sage] 2011/12/28(水) 20:00:23.21 AAS
>>906
> カレントディレクトリかテンポラリディレクトリのパスに日本語が入ってるとか
それは無いです
909(1): デフォルトの名無しさん [sage] 2011/12/28(水) 20:16:52.26 AAS
>>897
暇だったからLANGUAGE CPPの方やってみたけど、問題なかった。当たり前か。ghciはversion 7.0.4でした。
変な制御文字でも埋まってるんじゃない?od -x -c Test.hsで見てみたら?
910: 896 [sage] 2011/12/28(水) 20:44:13.27 AAS
>>909
od コマンドが無いんで(Windows 7 環境)適当なバイナリエディタで見てみた
-------------------------------
{-# LANGUAGE CPP #-}
-------------------------------
7B 2D 23 20 4C 41 4E 47 55 41 47 45 20 43 50 50 20 23 2D 7D
-------------------------------
全く問題ないですよね
とりあえず、問題の stm パッケージさえインストールできれば作業は進むから、
#ifdef __GLASGOW_HASKELL__ などのマクロを外して自力でプリプロセスしようと思います
ですが、ひとつ問題が
#if ! (MIN_VERSION_base(4,2,0))
これは今使ってる base のバージョンが例えば 4.3.1.0 の場合、
これと #endif で挟まれている部分のコードは生きるんですよね
911: 896 [sage] 2011/12/28(水) 21:41:55.67 AAS
あかん
たとえ stm パッケージが無事インストールできても、
他の必要なパッケージで同じ問題が起きることに気づいた
もう OS 再インストールしか方法はないのかも知れん
912: 896 [sage] 2011/12/28(水) 21:59:15.96 AAS
意味も分からず解決してしまった
mingw-get-inst-20111118.exe をインストールしていたんだが、
これをアンインストールして、そのインストール先の mingw フォルダも全て削除したら、
何事も問題なく C のプリプロセッサ(CPP オプション)が使えるようになった
環境変数に mingw フォルダ内のどこかへのパスがあったわけでもないんだが、
なんでこれで解決するのか意味が分からない
GHC 内の mingw と干渉していたのではないかと思うが、
今まで普通に GHC と外部の mingw は共存できてたと思うんだが・・・
まぁいいや
お騒がせしました
上下前次1-新書関写板覧索設栞歴
あと 66 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.020s