トップページtech
1002コメント372KB

関数型プログラミング言語Haskell Part29 [転載禁止]©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001岡部メモリリーク健2015/07/14(火) 19:27:09.01ID:jJ1YDtNe
関数型プログラミング言語 Haskell について語るスレです。

         ,.-―: ̄`ー::::::::::、
       /::::::::::::.::::::::::::::::::::::::::::`::、、
      /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
      l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
      l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
     l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
     l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
     ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
    ヽ:::::    ̄ .)::;  l  ̄   l::::/    < 毛の壁(岡部健)の話は禁止な
     、:::::..   /:::; .,-、     l:::/、
    ,―::::::::  ゝヽ- ー' 、    l::/,、ヽ
     l,、,、,,:、:: / ,--、,-.、_ l    /::::::,、,、l
   l,、,、,、,、,、::、 `ー ̄-'   /:::::::::::,、,、l
   l,、,、,、,、,、,、::ヽ      /::::::::、,、,、,、,ノ:\

haskell.org (公式サイト)
http://www.haskell.org/

前スレ
関数型プログラミング言語Haskell Part28
http://peace.2ch.net/test/read.cgi/tech/1428535861/
0952デフォルトの名無しさん2016/01/25(月) 21:32:23.89ID:FKcC8XYP
引きずってるのは変な虫だけですから
0953デフォルトの名無しさん2016/01/25(月) 22:47:29.59ID:mYLsxkwY
一部の奴が胡乱な書き込みをしているだけで、9割が現実を見ているよ
0954デフォルトの名無しさん2016/01/26(火) 01:28:52.09ID:fLwBjkWJ
ジエネレーティブプログラミングみたいな表現力で考えると、スキャフォルドやテンプレートか、lispのマクロか、全てがs式(データ)か、haskellの遅延評価みたいな選択肢があって、
得手不得手含めて、どれが好きか勝手に選べみたいな感じ。
って、書いてて全く意味が分からないが。
0955デフォルトの名無しさん2016/01/26(火) 01:30:15.26ID:fLwBjkWJ
型の表現力は考慮してなかった。
0956デフォルトの名無しさん2016/01/26(火) 08:56:48.33ID:9z2oQ6YS
>Javaで言うところのInterfaceみたいなもんだから

こマ?
0957デフォルトの名無しさん2016/01/26(火) 09:22:36.05ID:hH8elJ+8
>>956
ざっくりしすぎだけどまあ、気持ちとしては近いんじゃね
0958デフォルトの名無しさん2016/01/27(水) 20:33:39.13ID:tY0EzgE5
わしも昔はHaskellerとして名を馳せたのじゃったがライブラリにArrowを受けてしまってな
0959デフォルトの名無しさん2016/01/28(木) 03:10:29.57ID:s/n+KVu9
後から実装できるのがinterfaceとは違う
0960デフォルトの名無しさん2016/01/28(木) 10:55:25.89ID:oB3jszBn
templateを教えたらHaskell並みに難しいのがバレるからinterfaceしか教えない現実
0961デフォルトの名無しさん2016/01/28(木) 11:11:40.25ID:tTuOSjjQ
重箱の隅をつついてどうでもいいことに華を咲かせるなぁ
言語違うんだから完全一致の概念にはならんだろ
ざっくりした気持ちで受け止めとけ
0962デフォルトの名無しさん2016/01/28(木) 19:20:31.31ID:V4rb6WtO
このスレにたどり着いたHaskell初心者が誤解してしまう恐れを取り除かないと
0963デフォルトの名無しさん2016/01/29(金) 22:37:12.50ID:V8UIRHzx
2ちゃんやってる段階で加齢臭漂うジジイしかいないこと確定なんで、意識高い(笑)Haskellワナビは
こんな痰壺のぞきに来ないやろ彡(゚)(゚)
0964デフォルトの名無しさん2016/01/30(土) 08:45:57.67ID:vmtmT3H6
3日に1回しか本気出さない怠け者でも通常の3倍以上生きてるだけでわりと有能だからね
若者に嫉妬されるのも仕方ない
0965デフォルトの名無しさん2016/01/31(日) 04:05:38.74ID:1wXDLlpg
すごいハスでさえなかなか読み切らない
できる人はあれ一日でおkなん?
0966デフォルトの名無しさん2016/01/31(日) 09:28:31.71ID:AEzrRz3r
>>965
読み切るだけなら1日か、長くても数日でできるでしょう。

でも、理解して、納得して、自分の言葉で説明できるまでには
そうとう時間かかると思います。
1ヶ月やそこらでは無理な人は多いです。

がんばってください。
0967デフォルトの名無しさん2016/01/31(日) 10:25:52.63ID:XFfzw+ki
少しでも批判的な立場から見れば、全部読み切る必要がないのは明らかだけど
批判を封じると無駄が増えていく
0968デフォルトの名無しさん2016/02/01(月) 06:10:51.64ID:zz5N12rG
鈍感力とかいってた頃は鈍感だからいくら批判されてもOKだったけど今は批判NGなのかな
0969デフォルトの名無しさん2016/02/01(月) 09:59:54.71ID:CiTgPvzP
また胡乱な書き込みが増えてきた
コードをさらせ
0970デフォルトの名無しさん2016/02/01(月) 21:19:05.11ID:yGV1+rav
じゃあ、コードを晒そうか。

聞いてくれ、さっき遅延評価の凄さを目の当たりにしたんだ。

無限リスト [[a], [a,a], [a,a,a], ・・・] を作る関数
stepup x = iterate (x:) [x]

リストから最左の指定要素を取り除く関数
remove xs x = xs \\ [x]

ここまで準備したところで、下記の計算をしてみる。
let xs = repeat 'a'
in head $ foldl remove (stepup 'a') [xs, xs, xs]

結果は、無限ループに陥ることなく "a" だ。

すごくね?
0971デフォルトの名無しさん2016/02/01(月) 21:26:58.60ID:TMgHKDk0
>>970
うんそうだね。

でも遅延評価ってのが何物なのかわかってくるとあんま驚かない。
0972デフォルトの名無しさん2016/02/01(月) 23:05:53.20ID:t43chpFC
yieldある言語だと無限要素の実現は容易だけど
それをリスト構造として扱えるって点では便利かもね
0973デフォルトの名無しさん2016/02/01(月) 23:14:58.61ID:Ciri+Qiy
遅延評価は並列処理をしようとすると驚き最小の原則を破る
0974デフォルトの名無しさん2016/02/01(月) 23:47:41.92ID:WxMLgo2+
遅延評価はノンプリエンプティブマルチタスクの親戚
タスクを遅延している

もしプリエンプティブならタスクが勝手に動き出すので無限ループを止められない
メニーコアとかも無限ループを止められない
0975デフォルトの名無しさん2016/02/02(火) 02:33:42.54ID:Dqi7KAqT
遅延のおかげでメモリ不足になってエラーになった
0976デフォルトの名無しさん2016/02/02(火) 04:43:44.40ID:xJAws4GV
ここから遅延評価の悪口を言っていこう
0977デフォルトの名無しさん2016/02/02(火) 05:59:03.44ID:JJLoMZID
どんなに素晴らしいプログラミング言語だろうと
コーディングする人間の質が悪ければ何の意味も価値もなさない

http://ideone.com/880zvK
0978デフォルトの名無しさん2016/02/02(火) 10:15:13.59ID:lBmePa6t
https://paiza.io/projects/6tuAv6EyXxyMfm4QkzUopg

まあこの程度のものを>>977みたいに書かれたらそりゃたまらんよな
0979デフォルトの名無しさん2016/02/02(火) 18:57:44.79ID:PRq2IyAN
ワンラインシェルスクリプトの俺スゲーみたいだな
悪いわけじゃないが、他者の可読性ってどうなんだ?
0980デフォルトの名無しさん2016/02/02(火) 19:35:18.50ID:uTTEQY4N
>>977
酷すぎて乾いた笑いが出るな
Sラン級糞コーダーに解答例書かせるとかPaiza大丈夫か
0981デフォルトの名無しさん2016/02/02(火) 19:43:13.89ID:24ytvjJT
このスレ、書いてないことまで透視能力使って読んでる奴いっぱいいるじゃん
それに比べたら書いてあることの可読性がどうなろうと透視するのは簡単だろ
0982デフォルトの名無しさん2016/02/02(火) 19:49:12.70ID:uTTEQY4N
検索してみたらただの2chの回答者じゃん
流石に一般人晒すのはマズイよ
0983デフォルトの名無しさん2016/02/02(火) 20:19:13.66ID:qoaDQoLB
instance Functor Tree where
fmap f EmptyTree = EmptyTree
fmap f (Node x left right) = Node (f x) (fmap f left) (fmap f right)

このコードで最初は(f x)なのに、あとの2つは(fmap f left)とfmapが先頭につくのはどうしてですか?
0984デフォルトの名無しさん2016/02/02(火) 20:29:25.29ID:lBmePa6t
>>983

1.つかないと型が合わないだろ

2.そもそも再帰的定義

「ある木に fmap f した結果は、根にfを適用し、葉の部分木にfmap fした木である」

が理解出来てるか?
0985デフォルトの名無しさん2016/02/02(火) 20:44:20.82ID:qoaDQoLB
>>984
>2.そもそも再帰的定義
>
>「ある木に fmap f した結果は、根にfを適用し、葉の部分木にfmap fした木である」
>
>が理解出来てるか?

すみません、理解できていないです。
なぜ葉は直接fを適用できないのでしょうか?
0986デフォルトの名無しさん2016/02/02(火) 21:14:43.83ID:lBmePa6t
>>985
たとえば整数の二分木(Tree Int)に
整数の偶奇性を判定する関数 even を fmap して
同じ形をしたブール値の二分木(Tree Bool)を得る場合を考えろ。

整数の(空でない)二分木は、根に値 x が収納され葉として部分木 left と right を持つので

Node x left right

という形をしている。
x の型は整数 Int で、 left と right の型は整数の二分木 Tree Int だ。
他方で、even の型は Int -> Bool なのだから、
even left とか even right という式は意味を成さない。
0987デフォルトの名無しさん2016/02/02(火) 22:42:19.59ID:x3VaMdqQ
Haskellは無限ループに陥りません。
だからこそコンパイルが通ればバグが無いことを保証できるのです。
0988デフォルトの名無しさん2016/02/03(水) 00:23:47.55ID:eYCB0y5I
バグの定義からはじめようか
0989デフォルトの名無しさん2016/02/03(水) 01:05:28.09ID:pvHSiWBf
>>985
1. fが受け取るのは[xの型] (xは[Tree型]じゃない)
2. left と rightは[Tree型]
3. [Tree型]とfの仲介がfmap

おわかり?
0990デフォルトの名無しさん2016/02/03(水) 03:37:57.16ID:mzFRVKkI
ideoneでhaskellのサンプルコードが無限ループじゃなかったっけ?
0991デフォルトの名無しさん2016/02/03(水) 04:12:58.04ID:OD3iNzjF
Androidでお手軽にHaskellできるアプリ誰か頼む。C4droid並の品質で。ソースコードはAndroidのVimTouchで書くからIDEは要らないや
09929852016/02/03(水) 11:15:50.69ID:B67PXnHg
>>986, 989
理解できました!
わかりやすい説明ありがとうございます!
0993デフォルトの名無しさん2016/02/03(水) 13:15:08.68ID:KiXDjJxB
タブレットでコーディングする需要があるのか…
0994デフォルトの名無しさん2016/02/03(水) 13:41:55.87ID:vZagwsW/
arm向けのコード吐けるhaskellコンパイラって存在するの?
と言ってみる
0995デフォルトの名無しさん2016/02/03(水) 13:47:52.96ID:WaqhOfMD
ARMをターゲットにしたクロスコンパイラなGHCは普通に存在する

そのGHCでGHC自体をARM向けにコンパイルすれば
ARM計算機上でHaskell使った開発ができるはず
0996デフォルトの名無しさん2016/02/03(水) 14:04:22.91ID:uEOUJl1K
むしろプラットフォームに依存しないようなソフトしか書けないやろ
0997デフォルトの名無しさん2016/02/03(水) 17:44:14.30ID:vZagwsW/
>>899に被せただけで特に意味はなかったが、クロスコンパイル環境は普通にあるのな
Androidなら誰か暇人が作ってそうだけど、あっても古くてメンテされてないかな

>>996
そのコメントは流石に的が外れすぎてる
0998デフォルトの名無しさん2016/02/03(水) 20:41:29.18ID:WaqhOfMD
というかそもそもGHCはLLVMに対応してるからな
0999デフォルトの名無しさん2016/02/03(水) 20:54:22.37ID:jdFVwRiR
>>993
キッズが空き時間にスマホにBluetoothキーボード繋いでCodeForcesやるだろ
1000デフォルトの名無しさん2016/02/03(水) 22:28:22.77ID:SRrG8qzq
トイプログラムで遊んでないでアプリ作ろうぜ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
http://pink-chan-store.myshopify.com/
レス数が1000を超えています。これ以上書き込みはできません。