関数型プログラミング言語Haskell Part28at TECH
関数型プログラミング言語Haskell Part28 - 暇つぶし2ch519:デフォルトの名無しさん
15/06/11 00:21:14.93 hzM+9d/O.net
>>510 基地外は失せろ
>>511 ScottからMoggiまで十数年ぐらい?
確かに意外と短かったんだな…

520:デフォルトの名無しさん
15/06/11 00:38:40.42 pB1BlG5Q.net
Dana S. Scott. Outline of a mathematical theory of computation. Technical Monograph PRG-2, Oxford University Computing Laboratory, Oxford, England, November 1970.
E. Moggi. Computational lambda-calculus and monads. In 4th LICS Conf. IEEE, 1989.
この間ほぼ20年かな? いずれにせよ「今までなかった」はないw

521:デフォルトの名無しさん
15/06/11 00:53:54.36 QUqBUSLw.net
>>512,513
1980年代初めには応用可能性が知られてて、
1985年にMoggi含む複数人の「圏論とプログラミング」という
ワークショップが開かれてるんで、10年ほど、と計算した。

522:デフォルトの名無しさん
15/06/11 01:06:20.81 pB1BlG5Q.net
しらんかった。後者はこれか。
URLリンク(dx.doi.org)
ぱっと見、まだmonadとは書かれていないが。
URLリンク(www.disi.unige.it)
には
My thanks to M. Hyland, A. Kock (and other participants to the 1988 Category
Theory Meeting in Sussex) for directing me towards the literature on monads relevant
to the subject.
とあるな。

523:デフォルトの名無しさん
15/06/11 03:59:27.71 bOOr6QDN.net
モナドを使うという発想は、C++でテンプレート機構使えばコンパイル時処理できるぞっていう発見と似たようなものではないか
そのために生み出されたのでなく元々そこに(見過ごされたまま)あった

524:デフォルトの名無しさん
15/06/11 09:14:47.16 XjBiZb+W.net
おいおいみんなどうしたんだよw
モナドもしょぼい概念だったとそろそろ分かれよw

525:デフォルトの名無しさん
15/06/11 09:31:44.59 IhjRP6Ev.net
では次のを頼む

526:デフォルトの名無しさん
15/06/11 09:44:54.00 XjBiZb+W.net
>>518
しょぼいっていうのは分かってんだな?
ScottやMoggiにあこがれてるんじゃまだかなと思うんだが

527:デフォルトの名無しさん
15/06/11 10:16:52.40 kAIL8Wh0.net
なんか地獄のミサワっぽい

528:デフォルトの名無しさん
15/06/11 10:57:09.42 npoi0wO0.net
基地外うざいししつこい>bOOr6QDN,XjBiZb+W

529:デフォルトの名無しさん
15/06/11 11:01:20.03 PuDMuD0l.net
こういうマウンティングのためだけに知識を得る底辺層が消えない限り
プログラマの地位は向上しないだろうな

530:デフォルトの名無しさん
15/06/11 12:10:32.39 bAVDGSXl.net
知識を得なければマウンティングできない現状をどう変える?
少なくとも言えることは、知識ゼロでマウンティングできる最悪の状況は回避してほしい

531:デフォルトの名無しさん
15/06/11 12:55:54.03 5wVrf0wy.net
マウンティングした者はLetter to a Young Haskell Enthusiastを1000回音読する刑に処す

532:デフォルトの名無しさん
15/06/11 13:47:53.72 MCnGDuRk.net
なぜマウンティングするのか? なぜならそこに山があるからだ

533:デフォルトの名無しさん
15/06/11 14:26:29.66 bAVDGSXl.net
言っておくがLisperが関数型の知識をいくら詰め込んでもドヤ顔できない
なぜなら動的型だから
ドヤ顔したいやつは静的型に群がっているのであって、関数型はあまり重要ではない

534:デフォルトの名無しさん
15/06/11 17:04:10.51 QUqBUSLw.net
なんで毛スレのキチガイがOCamlじゃあんくてHaskellのスレに紛れ込んでるんだか。

535:デフォルトの名無しさん
15/06/11 18:26:19.74 npoi0wO0.net
>>527
>>481

536:デフォルトの名無しさん
15/06/11 19:26:15.71 bOOr6QDN.net
つまりOCamlerは強いけどHaskellerは嘗められてる?

537:デフォルトの名無しさん
15/06/11 19:45:13.61 yf7swl7Y.net
>>527
キチガイはお前だよ

538:デフォルトの名無しさん
15/06/11 20:02:46.43 npoi0wO0.net
>>527>>514でちゃんと有用な情報を提供している
>>523>>519>>517>>516>>511は情報価値0以下の荒らし。

539:531
15/06/11 20:04:50.35 npoi0wO0.net
>>511じゃない、>>510

540:デフォルトの名無しさん
15/06/11 21:32:50.42 pgVrj2dA.net
悪行は善行で相殺できるという前提があるから
犯人とか功労者とかが誰か調べることに拘ってるのか
すごい納得してしまった

541:デフォルトの名無しさん
15/06/11 22:17:16.64 3DdkuOqE.net
相殺云々以前に、プログラム板なんだから
プログラムの話をまともに出来ない奴は
お呼びじゃない、ってだけだろ。

542:デフォルトの名無しさん
15/06/11 22:48:19.91 QpuB/nCQ.net
コード書けない連中がこういうときだけでかい面して鬱陶しい

543:デフォルトの名無しさん
15/06/11 22:57:20.66 npoi0wO0.net
相殺も何も基地外は善行0、それ以外の人は悪行0。

544:デフォルトの名無しさん
15/06/11 23:43:07.37 pgVrj2dA.net
「プログラムは書く時間より読む時間が長い」なんて言われたら
プログラムを書く話なんてしなくなるでしょ
読んだ人の感想とかそれに対しどう返答するかみたいな事ばかり考えるようになる

545:デフォルトの名無しさん
15/06/12 00:12:07.74 lWqlv+DR.net
全くならない。

546:デフォルトの名無しさん
15/06/12 00:48:31.06 de1HjIPa.net
このスレ、プログラム板でもかなり書き込みが多い方なんだけど、
その割にHaskellで作ったアプリが世の中にないのは、
このスレに書き込んでいる人間の大半は結局喋っているだけで、ちっとも作っていないから?
それとも、ごく少数の口数の多い人間がこのスレに常駐しているということか?

547:デフォルトの名無しさん
15/06/12 01:09:28.05 kpQWF1y9.net
みんな不安なんだよ

548:デフォルトの名無しさん
15/06/12 01:11:49.35 ewifs/WC.net
「アプリ」でどういうものを指しているのかによるだろ。

549:デフォルトの名無しさん
15/06/12 01:14:23.65 3H6DdNeR.net
スレが伸びてるのは単に基地外が粘着してるから。
アプリは URLリンク(wiki.haskell.org) とかあるし、
外資もNTTデータも金融とかclosedなので外に出ないの�


550:熨スいと思うが、 それでもC++とかJavaとかに比べれば実験的な言語だから少ないな……



551:デフォルトの名無しさん
15/06/12 01:29:41.08 ewifs/WC.net
スクリプト言語の代わりに普段使いしてる感じだし、
なによりParsecのお蔭で色々とはかどるのでなあ。
わりと最近3000行程度のGUIのツールを書いたが、
他所で役に立つようなものでもないので、公開するとか
そういうことも特にない。

552:デフォルトの名無しさん
15/06/12 07:19:43.33 1CtSfxjI.net
書くだけならスクリプト言語で十分だが読めない保守できない等の苦情が予想されるので
じゃあ静的型付けなら読めるのか実験したい

553:デフォルトの名無しさん
15/06/12 10:25:49.56 ppIf3q9e.net
NTTデータを入れると、一気にカスっぽく見える。
外資と金融の間に、さりげなくNTTデータを入れるセンスが絶妙。

554:デフォルトの名無しさん
15/06/12 11:52:15.09 lWqlv+DR.net
>>545
URLリンク(www.google.co.jp)
こういう世界でどうなるか、少なくとも実験としてはすごいと思う。
数理システムも買収したし。

555:546
15/06/12 11:54:37.53 lWqlv+DR.net
iOSのSafari、リンクがまともにコピペできねーorz
>>546は「NTTデータ Haskell」の検索結果な

556:デフォルトの名無しさん
15/06/12 12:00:11.55 nIxAy/au.net
NTTデータって人身売買の会社じゃなかったの?

557:デフォルトの名無しさん
15/06/12 12:08:38.69 lWqlv+DR.net
前はHaskellでインドに外注とか言ってて
いろんな意味ですげーとか思ったが
最近はどうなん?

558:デフォルトの名無しさん
15/06/12 12:26:32.05 bMq/lwLt.net
( ゜Д゜)マジカヨ

559:デフォルトの名無しさん
15/06/12 12:46:55.72 ppIf3q9e.net
年金のシステム作ってたのもNTTデータだろ?
NTTデータって、空き巣に絶対に破られない鍵を設置して、
鍵を閉め忘れて出かけるような感じだよね。

560:デフォルトの名無しさん
15/06/13 04:35:41.57 VBb4KC+k.net
あれもうシステムの問題じゃないよなあ
フリーメールで届いた添付.exeダブルクリックする連中とかソーシャルエンジニアリング以前の問題

561:デフォルトの名無しさん
15/06/13 10:21:50.46 +dSTwJzi.net
そんなに蒸し返したいなら言わせてもらう
ユーザが多数で開発者が少数なら、ユーザのせいにするのは非合理的という思想があった
その合理主義の結果がこれ
それとも蒸し返す意図がなくても自然に繰り返されるパターンなのか

562:デフォルトの名無しさん
15/06/13 11:17:16.80 kXcfUXOo.net
結果がこれ ってどれ?

563:デフォルトの名無しさん
15/06/13 11:22:32.93 fmObtMJM.net
はすけるスレだからハスケルの話してね

564:デフォルトの名無しさん
15/06/13 12:05:27.26 +dSTwJzi.net
関数型言語の仕様は意図的かそれとも自然にできたか
衒学的な意図がないならないと正確に説明できれば普及しやすいのでは

565:デフォルトの名無しさん
15/06/13 12:20:08.70 RjEVnwaL.net
>>556
普及するのにそんな御大層なものは要らんよ。
必要なのは次の3つのみ。
・馬鹿でも簡単に始められて、扱いやすいGUIアプリ用フレームワーク
・そのフレームワークと連動するRAD統合開発環境
・数多くのGUIアプリのサンプル
これに加えてスマホアプリも簡単に作れれば尚良い。
逆に、Haskell というアプリ開発環境はこれらが無いから流行らない。

566:デフォルトの名無しさん
15/06/13 13:26:03.85 +dSTwJzi.net
>>557
VBやObj-Cが普及した理由はそれだが長続きしない
それらを終わコンにする圧力があった
MSやAppleでも逆らえない

567:デフォルトの名無しさん
15/06/13 14:42:11.49 gPoekrm5.net
バカに流行る必要なんざ微塵もないだろ。
環境が悪化するだけだわ。

568:デフォルトの名無しさん
15/06/13 14:43:22.99 CpRxCXBF.net
>>559みたいなバカが寄り付いている時点で確かに終わってるな

569:デフォルトの名無しさん
15/06/13 14:55:15.57 fmObtMJM.net
表面じゃなくて内容の話を希望な

570:デフォルトの名無しさん
15/06/13 16:08:55.81 U7fz6F5N.net
「その数式、プログラムできますか?」という本を立ち読みしたら
圏論とSTLがどーたらみたいな謎文章が目に入って困惑している
"圏論 STL"でググれば当該箇所Google Booksで読めるんですけどこれってまともなんですかね?
Haskell関係ないけど圏論がらみということで一つ

571:デフォルトの名無しさん
15/06/13 16:55:46.04 KIURMs4/.net
>>556
何故、普及に拘るの?

572:デフォルトの名無しさん
15/06/13 17:04:10.62 oBvXXQ5V.net
>>562 見たけど、確かに意味不明だ。訳の問題かと思ったが、原文も似たようなもんだな……。
強いて言えば原文の"categorical theories"が和訳では勝手に「圏論(categorical theory)」になってたり、
"not computationally isomorphic"のnotが訳し漏れで「計算上は同型」になってたりと訳の問題も大きくて、
原文のほうは好意的に解釈すればまだ理解可能だけど。

573:564
15/06/13 17:09:54.96 oBvXXQ5V.net
(原文も「好意的に解釈すれば理解可能」なだけで、
For a long time, people believed that only categorical theories were useful for programming
云々は聞いたこともないので違う並行宇宙の話としか思えないw)

574:デフォルトの名無しさん
15/06/13 18:44:09.66 P5CgqW+9.net
普及しないと、ゴミみたいな知識に終わるからだ。
普及させたくない層もいるけど、ごく一部だろう。
普及すると、割を食うのはトップ層だからな。

575:デフォルトの名無しさん
15/06/13 20:11:39.38 sBN7IsLr.net
category theory(圏論)とcategorical theoryは別物なのかw
誤訳するのもわからなくもない
(notの訳し漏れは論外)
URLリンク(en.wikipedia.org)
> "Categorical theory" redirects here. Not to be confused with Category Theory.

576:デフォルトの名無しさん
15/06/13 20:13:41.36 xQVzvj+B.net
>>566 俺は総合的には普及してほしくないとは思わんが、
普及するとゴミが増えるのも事実

577:デフォルトの名無しさん
15/06/13 20:21:22.10 ZkFtP6do.net
>>558
そうは言っても、そうとう長続きしてきたような気がするが。
>>557 は普及する要因ではあってもオワコン化する原因ではないんじゃないか?
それとも、>>557 のせいでオワコン化が早まったということ?
何れにしても、Haskell はその歴史は長いくせに、
アプリ開発という点では未だに始まってすらいないよな。
方法論の研究は行われてるのかな?

578:デフォルトの名無しさん
15/06/13 20:43:48.20 jKGoCo7L.net
なにか適当な GUI のからくりはないものか

579:デフォルトの名無しさん
15/06/13 21:00:56.80 EFCkVZsH.net
GUI開発環境はともかく、「方法論」は手続き型やオブジェクト志向でも
それこそゴミしかないと思うんだが。

580:デフォルトの名無しさん
15/06/13 21:18:01.62 ZkFtP6do.net
>>571
まだまだゴミだと評価しようが、
その方法論で実際に数多くの多種多様なアプリが作られてる。
これからも現場で起きた問題に対して改善案が提案されていくと思う。
... --> 問題 --> 提案 --> 問題 --> ... というサイクルができてる。
で、Haskell(関数型)はどうなのよ、という話。
一歩引いた立ち位置の研究者から提案された方法論が現場で使われ始めた段階なのか、
それとも、そういう方法論すらまだ無い状態なのか。

581:デフォルトの名無しさん
15/06/13 21:19:33.57 jKGoCo7L.net
モナディウスはどうしているのだろう?

582:デフォルトの名無しさん
15/06/13 21:22:43.08 SsnyuIbc.net
単体テストは関数的なほうが副作用ないから簡単だよな。
ミクロなデザインパターンとかも、そもそも不要か自明になるってよく言われてるとは思う。
マクロな開発プロセスは普通と変わらないんじゃない?

583:デフォルトの名無しさん
15/06/13 21:32:42.37 ZkFtP6do.net
>>573
あれは、取りあえず作ってみただけで、その後が続かなかったよね。
あれを叩き台にして色々議論されることもなく、
Haskell でこんなこともできるんだと言われて、それで終わり。

584:デフォルトの名無しさん
15/06/14 00:34:08.79 RWIDraJH.net
モナディウスって名前だけで方法論がわかる
他のアプリを真似すればいいんだろ

585:デフォルトの名無しさん
15/06/14 08:27:51.02 OtrhG80a.net
スーパートップ層 普及を望んでいる
トップ層 普及を望んでいない
中堅層 普及を望んでいる
下位層 普及を望んでいないか、どっちでも良い

586:デフォルトの名無しさん
15/06/14 09:07:11.87 kkYM1O8c.net
>>577
proof it!

587:デフォルトの名無しさん
15/06/14 10:09:03.75 Pjcz0hD2.net
>>573
コード読めないの?馬鹿なの?

588:デフォルトの名無しさん
15/06/14 10:32:05.79 SL/F9php.net
プログラムなんてのはツールなんで
用途に応じた使い方ができればそれでいい。
一番売れるのは安くてシンプルな電卓だろうが
使う用途や人間を選ぶ高機能な関数電卓や、
ソロバンや計算尺にもそれぞれ需要がある。
計算尺振り回して「使い方が分からん。
こんなモンはゴミだ」と喚いても
メーカーもユーザも苦笑か失笑しか出来ん。

589:デフォルトの名無しさん
15/06/14 15:29:34.67 L5Y5b9kK.net
sm26445256

590:デフォルトの名無しさん
15/06/15 02:53:59.25 LOIdsEui.net
基地外に愛されてしまうのもHaskellの業の深いところだ

591:デフォルトの名無しさん
15/06/15 07:50:18.85 Hdxb2Sdn.net
基地外を呼び寄せる言語‥どういうところがそうなんだろう?
prolog とかにはなぜ寄らないのか?

592:デフォルトの名無しさん
15/06/15 08:34:53.82 9GGhHIhr.net
一言で言えば、Haskell使える俺カッコイイみたいな言語だから

593:デフォルトの名無しさん
15/06/15 09:14:23.05 IHPL8idc.net
俺カッコイイとかいう常套句に、異常さを伝える力はない
まあオオカミ少年みたいに常に言い続ければそのうち当たるわな

594:デフォルトの名無しさん
15/06/15 22:02:16.43 vBLMZKIz.net
Haskell使える俺TUEEEEEEE

595:デフォルトの名無しさん
15/06/15 22:04:05.10 Hdxb2Sdn.net
lisp/scheme じゃないのはどうして?

596:デフォルトの名無しさん
15/06/15 23:00:49.05 q35vzvCm.net
田中死ね
ボレロレイプされろ

597:デフォルトの名無しさん
15/06/16 00:19:10.77 WwZ8EXS4.net
>>580
いまどき計算尺はごみでしょ。

598:デフォルトの名無しさん
15/06/16 01:06:35.60 nO6QHrwV.net
>>589
需要があるから生産も販売もされてる訳で。

599:デフォルトの名無しさん
15/06/16 08:02:12.01 4c+taF0x.net
言いたいことはあってると思うしわかりやすいが
さすがにHaskellは計算尺じゃないだろw

600:デフォルトの名無しさん
15/06/16 21:51:02.26 CcjDjnqw.net
まあ計算尺もわからないような奴がHaskell学んでもたいした事できないだろう
ところで計算尺ってなんだ

601:デフォルトの名無しさん
15/06/16 22:34:00.92 0ci32UBo.net
計算尺、今ではほとんど使わないんだろうけど、あの仕組みを考えた人は天才だと思う

602:デフォルトの名無しさん
15/06/16 23:17:45.09 MDYhP0lu.net
ghciのコマンドのヘルプみてたんだが、なんでこれコンポーザブルになってないんだ?
:browse や :info で得た情報を他のコマンドに渡して処理できれば便利やん。
っていうか、:list hoge でhogeのソースを見れるのに:edit hogeは無理なのか...
いちいちファイル名を探してこなきゃならんのは面倒だよ。

603:デフォルトの名無しさん
15/06/17 00:38:11.14 iYY4vjEN.net
シェルが便利すぎてCを書く必要があまりない某OSで型が厳格でない言語が流行したから
型のためには便利なコマンドを規制するべきと判断したのではないだろうか

604:デフォルトの名無しさん
15/06/17 06:02:52.89 UUD++cQ/.net
reduce を map で実装して何か意味あるの?

605:デフォルトの名無しさん
15/06/17 08:06:07.46 iYY4vjEN.net
敵が来てから武器を作ると間に合わないという理由で、使わない無駄な武器を作ってる

606:デフォルトの名無しさん
15/06/17 08:28:31.12 6y+hRJoT.net
reduceとmapを持ってなきゃいけない型クラスのminimal complete definisionsに使えるかも

607:デフォルトの名無しさん
15/06/17 09:11:03.75 0QSt0PBy.net
普通にreduceでmapを実装すればいいやん

608:デフォルトの名無しさん
15/06/17 11:54:20.02 FwmlJS0O.net
>>598
Control.Functor.Zipの下に来なきゃいけなくなるから超不便だと思う。

609:デフォルトの名無しさん
15/06/18 11:51:58.85 zIn+ti7/.net
「b を a で実装可能」という関係は
反対称律「a <= b かつ b <= a ならば a = b」を満たさない

610:デフォルトの名無しさん
15/06/19 15:33:03.81 dN77ILvV.net
                  ,.-―: ̄`ー::::::::::、
                /::::::::::::.::::::::::::::::::::::::::::`::、、
               /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
               l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
               l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
              l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
              l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
              ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
             ヽ:::::    ̄ .)::;  l  ̄   l::::/
              、:::::..   /:::; .,-、     l:::/、
               ::::::::  ゝヽ- ー' 、     l::/,
                ,:、:: / ,--、,-.、_ l     /
    ,.:':'゙'゙'゙:゙'゙':';.        、::、 `ー ̄-'    /
   r゙ ,.: :;;;:: : : :           、::ヽ      /:
   | : ::::~';::--ー'ー-----ーー;;:'゙ .: :` ‐- 、  |
  ,i    ::::::::::::::::::::::::::::::: ::: :ヾ        i
  r'     ::::::::::::::::: : : :::::: :::::  ::::. .      /
  |      :::::::::: : : : : ::: ::  ::         イ
  i      : : ::::::::::: : : ::::::: :         |
  |      ,.;イ-- .,           ,... -' i
   i      ,.;':/   ゙'ー-.,_ i    ,.イ::  /
  .i::::   /:/        ̄i   / ゙i   |
  │::  ノ::/         |   i   |  |
 r':: イ:::::i゙            |  |   i   |
 |:: | ヽ '-.,         ヽ 〈    ヽ ヽ.,
 i, , '-, ゙'ー'ー'          ヽ、`,ー、  `'ー'ー'

611:デフォルトの名無しさん
15/06/19 20:00:49.31 rvqvJJVS.net
岡部犬ってか

612:デフォルトの名無しさん
15/06/21 14:34:33.88 yL+fCFF6.net
ポイントフリー信者はmapが1変数関数かもしれないと思っている
g = map f
引数 :: a -> b
結果 :: [a] -> [b]
しかし決め付けやレッテル貼りを嫌うのでmapが2変数関数である可能性も否定しない
彼らにとって引数を書くことはレッテルを貼ることに等しい

613:デフォルトの名無しさん
15/06/21 20:14:27.96 HwEzsZwl.net
意味ワカンネ
つうかポイントフリー信者がどうだろうが
Haskellにはそもそも1変数関数しかないのだが

614:デフォルトの名無しさん
15/06/21 20:18:32.21 RBHwsW1q.net
>>605
>Haskellにはそもそも1変数関数しかないのだが
どういう意味?

615:デフォルトの名無しさん
15/06/21 20:33:23.95 HwEzsZwl.net
Haskellではa->b->c は常にa->(b->c)であって
(nullary constructorをとりあえず脇に措けば)
普通の関数のアリティは本質的に1だけだ。

616:デフォルトの名無しさん
15/06/21 21:08:54.24 pK1SDj/K.net
たしかすごHにもそんな説明あったな

617:デフォルトの名無しさん
15/06/21 21:12:32.01 7XsQ/1hl.net
607を補足すると、
f :: X -> Y -> Z
は 「X型変数とY型変数を取ってZ型の値を返す関数」 というより
「X型変数を一つ取って『Y型変数を一つ取ってZ型の値を返す関数』を返す関数」 ということだな。
言葉で書くと却ってわかりづらいな。

618:デフォルトの名無しさん
15/06/21 21:12:49.77 HwEzsZwl.net
正確ではなかったので訂正しておく。
関数型の値としての関数は常に1引数だ。
データ構築子はそもそもこの意味の関数ではない。

619:デフォルトの名無しさん
15/06/21 21:14:20.58 HwEzsZwl.net
あと、関数は常に1引数なのでHaskellにカリー化はそもそも存在しない。

620:デフォルトの名無しさん
15/06/21 21:22:10.14 7XsQ/1hl.net
>>611
そのように言われてしまった
curry :: ((a, b) -> c) -> a -> b -> c
さんの気持ちを答えよ(140字)

621:デフォルトの名無しさん
15/06/21 21:24:27.97 Sh7VBIsF.net
(それは雰囲気一緒なのでそういう名前になってるのでいわゆるカリー化とはちょっと別では)

622:デフォルトの名無しさん
15/06/21 21:40:32.89 HwEzsZwl.net
>>612
それはカリー化でもなんでもない。
見ての通り
(a,b) -> c
のアリティは1だ。

623:デフォルトの名無しさん
15/06/21 21:42:45.93 7XsQ/1hl.net
・多引数関数が存在するかどうか、の議論の前に「多引数関数とは何か」を定義したほうがいい。
・立場や考えた方によって「多引数関数とは何か」は異なりうる。
・一つの答えは「タプルを引数に持つ関数」
・「タプルという一つの引数を持ってるだけですよね?」というツッコミ。
よーく気をつけないと「多引数関数とは何か」 という話を蒸し返してしまう。

624:デフォルトの名無しさん
15/06/21 21:51:01.56 HwEzsZwl.net
Haskellの関数型構築子(->)の性質から関数型の値としての
関数の引数は常に(->)の左に来る型なんだからな。
タプルを引数にとるのが多引数だと言い出せば
リストを引数にとるのは可変長引数だということになる。
後者がおかしいと思うなら前者もおかしい。

625:デフォルトの名無しさん
15/06/21 22:16:31.58 X7jEdUgs.net
Text.Printf 「呼んだ?」

626:デフォルトの名無しさん
15/06/21 22:29:13.88 yL+fCFF6.net
mapは単項演算を可変長引数にする
reduceは二項演算を可変長引数にする
というのは別におかしくない
Haskellにこだわらない人ならそう思う可能性がある

627:デフォルトの名無しさん
15/06/22 00:13:49.02 egF2isgn.net
         ,.-―: ̄`ー::::::::::、
       /::::::::::::.::::::::::::::::::::::::::::`::、、
      /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
      l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
      l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
     l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
     l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
     ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
    ヽ:::::    ̄ .)::;  l  ̄   l::::/    < 排便ダン
     、:::::..   /:::; .,-、     l:::/、
    ,―::::::::  ゝヽ- ー' 、    l::/,、ヽ
     l,、,、,,:、:: / ,--、,-.、_ l    /::::::,、,、l
   l,、,、,、,、,、::、 `ー ̄-'   /:::::::::::,、,、l
   l,、,、,、,、,、,、::ヽ      /::::::::、,、,、,、,ノ:\
      /⌒\〆',  `  ̄ ´  ゝ/⌒\
    /  ノつ\ ・    ・  /⊂  ヽ!
o0○ノ  /  3  \ (::::⌒ヽ / とノ\ ヽ○0o
(    /、_ノ\   Y `(_、_)   /  \´  )゚
 \_)    `ヽ   : :;;*:;   : : : |    (_ノ
         人__;;:;;、___ノ          ヽヽ        ヽヽ
             ;:;;:;;:;,,           ─┐ |  |   ─┐ |  |
          ∬ ;;:;::.;::.::;::..:;:..: ∬          /  |  |      /.  |  |
      ・~   ;::;.:;:;:;:;:.:;:.:::.;:;:;.:.:.:          ノ    ノ  ┐ ノ    ノ  ┐
          ∬;;;:::;;;:;:.:;:.::.:;;.:.;.:;.:; ∬                 ┴    ヽヽ     ┴
              :"

628:デフォルトの名無しさん
15/06/22 07:30:14.32 7ItaFFjL.net
不毛な議論はやめろ

629:デフォルトの名無しさん
15/06/22 07:38:37.78 8relXNjB.net
毛の壁だから不毛な訳ない

630:デフォルトの名無しさん
15/06/22 08:33:39.76 jkkSdEVt.net
不毛な議論はやめて早く契約をという
きみたちはいつもそうだ

631:デフォルトの名無しさん
15/06/22 10:49:06.51 HczZ6Mad.net
>>607
有り体に言えばそうなるわな

632:デフォルトの名無しさん
15/06/22 16:22:57.80 uDj89vD5.net
         ,.-―: ̄`ー::::::::::、
       /::::::::::::.::::::::::::::::::::::::::::`::、、
     /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
     l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
     l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
    l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
    l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
    ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
   ヽ:::::    ̄ .)::;  l  ̄   l::::/
    、:::::..   /:::; .,-、     l:::/、
     ::::::::  ゝヽ- ー' 、     l::/,
      ,:、:: / ,--、,-.、_ l     /        
       、::、 `ー ̄-'    /
         、::ヽ      /:
    /´⌒´ヽゝ ─ 'ヽ⌒ヽ
   /   ィ   ,  ヽ  , )` `ヽ
  /    ノ^  ー   '` ー 'ヽ   ゙i
.. ノ  ,,,ノ            Y´゙  )
 (   < |             !  /
  ヽ_  \           ノ_/
    ヽ、__ ヽ.ー     @  ノ  ソ、
      〈J .〉  ヾ、.::;;;;;;::.ノ |ヽ-´
      /""     ;ミシミッ  .|
      レ    .イ、_∪ノ  .リ
     .,ゝ    ,ノ   |  ' ヽ ノ
    / ` レリ  i´   リ
    i    /    `、   i'
     〉  イ      〉  |
    /  ::|      (_ヽ \、
   (。mnノ       `ヽ、_nm

633:デフォルトの名無しさん
15/06/22 20:02:55.77 yB0CTLEJ.net
毛の壁を風化させない勢、なんなんですかね

634:デフォルトの名無しさん
15/06/23 02:22:17.45 wiF7wKM1.net
rubyで言うところのcase文はhaskellでどう書くとスマートですか?
case x #長さ1の文字列とする
when 'a'..'z'
...
when '0'..'9'
...
when '#'
...
else
...
end

635:デフォルトの名無しさん
15/06/23 05:33:12.62 EWNumgnc.net
引数の性質で場合分けするなら素直なのはガードだけど
もっとかっこいいやり方はあるかも
f :: Char -> a
f x
| x `elem` ['a'..'z'] =
| x `elem` ['0'..'9'] =
| otherwise =

636:デフォルトの名無しさん
15/06/23 11:17:40.69 30kOauSN.net
reduce関数やrange関数やmap関数は、
命令型のループでしか書けません。なぜならば、ノイマン型コンピュータという
ハードウェアは究極的には命令型でしか動作しないからです。
関数型の機械語なんて存在しません。

637:デフォルトの名無しさん
15/06/23 12:56:24.51 HcqKhimH.net
オブジェクト指向言語の機械語も存在しないけどな。
究極的には人間は原子でてきてますとか言われてふーんとかはーとかしか思わんし
目の前�


638:フ人が美人かどうかは原子関係ないすね。



639:デフォルトの名無しさん
15/06/23 13:34:07.31 DUXK3D31.net
>>628を見てこれを思い出した↓
>あのさー、「二次元はただの絵」なんて言葉には何の意味もないわけよ。当たり前すぎる。
>ただの絵って、そりゃ絵だよ。そんなの誰にでもわかるって。
>これは言い換えるとね、例えば友達が彼女の写真を見せてくれたとして、
>「これはただのインクの集合だ」と言ってるのと同じなわけよ。
>もっと言うと、友達の恋人を指差して、「こいつはただのタンパク質だ」と言ってるのと同じなわけよ。
>別に間違ってないよ。写真はインクだし、人間はタンパク質だ。でもそれがなんだっての?
>インクだから感情を抱くのは間違いだ、タンパク質だから好きになるのは間違いだ、とでも言うの?
>それはちょっとバカすぎるね。バカすぎる。「二次元はただの絵」ってのはそういうのと同じなんだよ。
>好きになるのは人格としての、存在としての彼女だろうが。物理的構造なんてどうだっていいんだよ。
>そんな当たり前のこともわからないわけ?

640:デフォルトの名無しさん
15/06/23 13:47:23.60 6v7jQlnd.net
ノイマン型じゃないアーキテクチュアとか普通に存在するし、
FPGAのお蔭で個人レベルでもできるんだが。

641:デフォルトの名無しさん
15/06/23 14:35:28.11 GZlJHPMK.net
まあ関数型言語が機械語のようなもので定義されることが多いのは事実だよね
あとは
「定義の循環なんて存在してはならない」
という思い込みを否定できるかどうか
それさえ否定できれば、逆に機械語を関数型で定義する可能性も理解できると思う

642:デフォルトの名無しさん
15/06/23 14:49:11.65 rMQdQ9WV.net
import Data.Char で isAlpha とかが使えるからちょっとだけ楽になるね(構造としての格好良さではない)

643:デフォルトの名無しさん
15/06/23 14:50:45.63 5/w+bsnn.net
>>628は毛の壁ブログのコピペ
URLリンク(kenokabe-techwriting.blogspot.jp)

644:デフォルトの名無しさん
15/06/23 18:05:36.94 x4Ozc/Jn.net
エロ漫画でヌいてる奴に、「それむっさいオッサンが描いた絵だよ」って言って萎えさせる奴いるけどさ、
むっさいオッサンが生み出したものでヌいておかしいっていうなら、そのむっさいオッサンに可愛い娘さんがいたらセックスしたいと思わないのかね

645:デフォルトの名無しさん
15/06/23 19:55:42.17 909KpOvq.net
定義が循環しちゃまずいだろ

646:デフォルトの名無しさん
15/06/23 21:15:50.96 6v7jQlnd.net
>>632
>まあ関数型言語が機械語のようなもので定義されることが多いのは事実だよね
なにいってんだか意味がわからん。
関数型言語の意味論が機械語で与えられた例なんかないだろ。

647:デフォルトの名無しさん
15/06/23 21:17:42.47 AaIPqvR+.net
多分定義と実装取り違えてる

648:デフォルトの名無しさん
15/06/23 21:37:51.41 rcOEv9Ao.net
ひょっとして(e?)BNFのことを言ってるのかな?

649:デフォルトの名無しさん
15/06/23 23:28:11.76 GZlJHPMK.net
仕様書に未定義とか書いてあるのは
完全な定義は実装で決まるという意味なんじゃないの

650:デフォルトの名無しさん
15/06/23 23:35:23.41 FjdLJNiv.net
その実装にはどんな非決定的な穴があってもいいんだよ

651:デフォルトの名無しさん
15/06/24 00:16:40.45 KkHlevhV.net
>>640
それは実装依存で未定義とは区別することが多い

652:デフォルトの名無しさん
15/06/24 00:26:39.98 MR5fwWu8.net
実装が定義、ソース読め
ってことじゃないの

653:デフォルトの名無しさん
15/06/24 01:16:05.07 k2PpIK+f.net
>>643
そんな(少し前までの)Rubyみたいなこと言われても。
>>640
未定義っつうのは文字通り未定義。
言語仕様にないので、なにが起きようが関知しない。
未定義動作の結果オレの財布が空になっても富士山が噴火しても構わない。
というか、もっと正確に言えば、未定義部分は言語仕様がないのだから
そこがどうなっていようが、それはその言語の「実装」とすら言えない。

654:デフォルトの名無しさん
15/06/24 02:27:11.04 zaWMLH1h.net
>>640
(まともな言語における)未定義ってのは、その部分については、各実装によって内部表現が異なっても構わないという明言だよ
要は速度と効率のために各ベンダに独自の最適化が許される、意図的に定義されない部分
そういう未定義部分に依存しないコードを書くのはプログラマの責任

655:デフォルトの名無しさん
15/06/24 02:58:03.53 k2PpIK+f.net
そりゃ意味と機能の問題を取り違えてる。
未定義動作を許すことが何の役に立つかと未定義動作そのものが何かは別の問題だ。

656:デフォルトの名無しさん
15/06/24 07:27:51.62 uN9f53jR.net
現実に起こる問題といえば
未定義の部分はコンパイラ作成時点でテストして保証されてないから
出力が一意になるかわからんし最悪実行不可能なファイルが生成されるかもしれないってくらいか

657:デフォルトの名無しさん
15/06/24 07:37:20.43 NJ59k6EW.net
>どんな非決定的な穴があってもいい
>オレの財布が空になっても富士山が噴火しても構わない
実装がどうなるか予知できないと書いてあるだけだが
「予知能力がない」ではなく「全知全能の筆者が許可した」と解釈すると大変な事になる

658:デフォルトの名無しさん
15/06/24 11:36:01.73 Dk9G0+2n.net
数学で
0以外の実数を0で割れば解なし
0を0で割れば未定義
みたいな

659:デフォルトの名無しさん
15/06/24 13:33:31.02 q/iymKMR.net
それはどっちも未定義

660:デフォルトの名無しさん
15/06/24 13:41:36.12 RcaJrYdV.net
仕様が未定義ならどんな実装してもかまわないので「0を0で割ると富士山を噴火させる」実装もOK

というだけ。

661:デフォルトの名無しさん
15/06/24 15:06:59.29 4h3P/eVf.net
URLリンク(twilog.org)

662:デフォルトの名無しさん
15/06/24 18:30:23.37 jBd8hVQL.net
非決定性プログラミングしたい場合
Lisp系だとambや継続使って解を1つみつけて終了だけど
モナド使うと全ての解を列挙できるってことでいいのかな

663:デフォルトの名無しさん
15/06/24 21:39:12.60 RcaJrYdV.net
>>653
わりとマジであなたが言ってることイミフ。
「非決定性」だとか「継続」だとか難しげな言葉を振りかざすのではなく
基礎からきちんと学ぶことをおすすめします。

664:デフォルトの名無しさん
15/06/24 22:58:58.61 +CIvGoel.net
>>653
妙な思い込みをしているようだけど…
グレアムのOn Lispに、簡易Prologみたいなのを実装する非決定性プログラミングの例が載ってるから、
ちょっと勉強してみたら?

665:デフォルトの名無しさん
15/06/25 01:30:55.42 L5oPYlD8.net
二重ループの内側で無限に列挙してしまったら外側は1個めでフリーズする
Haskell使ってもこの問題はなくならない

666:デフォルトの名無しさん
15/06/25 01:49:40.68 tWs5pbMG.net
それ、ただの単純ループですやん
非決定性ともバックトラックとも遅延評価とも関係ない…

667:デフォルトの名無しさん
15/06/25 08:02:56.67 L5oPYlD8.net
というか、ただの問題だから
出題範囲とか関係ない

668:デフォルトの名無しさん
15/06/25 09:34:06.79 En38UG6V.net
質問なのですが、HASKELLはJAVASCRIPTと比べてどのぐらい力強いですか?

669:デフォルトの名無しさん
15/06/25 10:42:57.71 GMFUAARU.net
>>659 (haskell の戦闘力は) 53万です

670:デフォルトの名無しさん
15/06/25 12:46:25.61 jSlSTYLT.net
CPUヘビーなことは向かないなんて泣き言いわない

671:デフォルトの名無しさん
15/06/25 13:31:24.59 X9iBWgn+.net
>>659
JavaScriptがフリーザだとしたら、Haskellは18号くらい

672:デフォルトの名無しさん
15/06/25 16:41:37.97 YBkNncXP.net
以下の関数をCPSに書き換えよ。
とか、その後の難しい話の下準備の為に修行できるドリルみたいなサイトありませんか?
なるべく解答付きで。

673:デフォルトの名無しさん
15/06/25 17:09:47.33 B9JLKsO8.net
>>663
qiita 7shi で検索。

674:デフォルトの名無しさん
15/06/25 17:20:28.66 B9JLKsO8.net
あ、あとCPSは階乗とフィボナッチのCPS版を見つけてきて、
fac(3)とかfib(4)あたりを手で簡約して見ると原理がわかる。
いったん理解すれば、あとは殆ど機械的に変換できるようになるよ。
そういや最初にCPS理解したときはその後しばらくCPS猿みたいなコード書いてたな……

675:デフォルトの名無しさん
15/06/25 17:32:34.99 5pnqx1ov.net
でも a -> b -> c を a -> b -> m c に書き換えるのは
arityが見えるとかいう意味不明な能力がないとできないよね

676:デフォルトの名無しさん
15/06/25 21:38:45.58 YBkNncXP.net
stack がパッケージの依存地獄を解決すると聞いて駆けつけました!

677:デフォルトの名無しさん
15/06/25 21:40:43.48 YBkNncXP.net
>>664
頑張ります

678:デフォルトの名無しさん
15/06/25 23:22:04.84 LfFLypOB.net
Freeモナドを上手に役立ててる例、ってなんかないですか?

679:デフォルトの名無しさん
15/06/25 23:33:50.49 eM2m5jCT.net
不便だと思うところに役立てればいいんじゃないかな

680:デフォルトの名無しさん
15/06/26 00:28:21.26 bFSe+PPP.net
>>670
料理のレシピのためのミニ言語、は楽しくてよかったんですが、便利か、実用的か、っていうとそうでもない感じがしました。
モナド的側面、つまり、前のコマンドの結果に応じて後に続くコマンドを変えられる、って性質を有効利用できれば良い、と思うのですが、いい案が浮かばず…
たまごを焼きすぎたらスクランブルエッグは諦めてたまご焼きにする。
うーん

681:デフォルトの名無しさん
15/06/26 01:05:51.23 sGcqyMBf.net
Freeモナドが使えそうなところでは大抵の場合、
finally taglessな表現/Symanticsを使う方がいい。

682:デフォルトの名無しさん
15/06/26 20:39:02.22 hymME7nU.net
なんとなくわかった
returnとjoinを作れないまたは作れるが使いたくない場合にFreeモナドを使うんだろ

683:デフォルトの名無しさん
15/06/28 07:58:01.92 UfM5xTqU.net
ほざけ無能ども

684:デフォルトの名無しさん
15/06/28 09:29:10.20 PsA9Isd2.net
>>674
どうした突然。何かつらいことでもあったのか。

685:デフォルトの名無しさん
15/06/28 14:22:33.44 eK2mTTNw.net
HaskellerはOCamlerを見下してますか?

686:デフォルトの名無しさん
15/06/28 14:45:38.67 oAeIj0m7.net
HaskellerかつOCamlerですが何か?

687:デフォルトの名無しさん
15/06/28 15:08:18.01 CsAfdxFY.net
オーキャメルってすごいの?

688:デフォルトの名無しさん
15/06/28 15:45:29.76 sCkqyjMf.net
ほとんど同じ
型が違うとか批判ばかりで代案を出せないコンパイラと、そいつに逆らえないプログラマ
全然すごくない

689:デフォルトの名無しさん
15/06/28 17:40:06.78 A43RH85D.net
開発環境は、その上で作られた成果物と、
作るのに使ったリソース(人、時間、金など)で比較すべき
まぁ、たいした成果物が挙げられないようでは話にならんがな

690:デフォルトの名無しさん
15/06/28 18:22:42.20 sCkqyjMf.net
どうせそう言われるだろうと思って
言われても平気な言語を二つも三つも覚えるんだよね
観賞用、保存用、予備みたいなあれ

691:デフォルトの名無しさん
15/06/28 18:45:49.13 TzgnuxBg.net
寄らば大樹の陰(笑)

692:デフォルトの名無しさん
15/06/28 20:48:17.29 sCkqyjMf.net
同じのを三個買ってきたのに使用頻度のデータを取るのは時間と金の無駄だろ

693:デフォルトの名無しさん
15/06/28 22:57:53.15 GoQYkhEF.net
>>677
あなたはHaskellを知ってるOcamlerです。Haskellerではありません。

694:デフォルトの名無しさん
15/06/28 23:08:27.40 PermaxaH.net
宗教かよ

695:デフォルトの名無しさん
15/06/28 23:24:45.18 CsAfdxFY.net
じゃあ、ここでEmacsとVimの雌雄を決しようぜ

696:デフォルトの名無しさん
15/06/29 05:59:50.21 Qi5/2Z+9.net
Ocamler = 岡村

697:デフォルトの名無しさん
15/06/29 06:43:23.70 brwnweVx.net
>>684
調査する側が答えを決めてるなら世論調査とかビッグデータとか無意味だな

698:デフォルトの名無しさん
15/06/29 10:57:15.25 8+Jbzv8W.net
>>679
>型が違うとか批判ばかりで代案を出せないコンパイラと、そいつに逆らえないプログラマ
>全然すごくない
才能を感じるw

699:デフォルトの名無しさん
15/06/29 20:28:54.62 UsldY24Z.net
おまえらえらそうにほざいてるけど、HaskellでGUIアプリ作れんの?

700:デフォルトの名無しさん
15/06/29 20:34:47.53 I6LM+XSd.net
>>690
ほざいてないし作れない

701:デフォルトの名無しさん
15/06/29 22:11:01.07 6j3t6Ku/.net
ほざいたし作った

702:デフォルトの名無しさん
15/06/29 23:37:46.91 dOBb6but.net
今 Haskell で GUI アプリを作ることにどれほどの意味がある?
無駄に苦労するだけで、たいしたメリットは得られないと思うが。
C# や Java などの方が意図したことを素直に書けると思うぞ。

703:デフォルトの名無しさん
15/06/29 23:43:17.21 8+Jbzv8W.net
>>690
作れるし作っているが楽しくはない。

704:デフォルトの名無しさん
15/06/29 23:46:32.90 QGo7kC4a.net
GUI原理主義なんなの?

705:デフォルトの名無しさん
15/06/29 23:56:20.64 NIwVXw8K.net
(Haste で javascript にコンパイルして)作ってる

706:デフォルトの名無しさん
15/06/30 00:41:54.66 xJJVLGS/.net
>>695
EmacsとVimを懲らしめる主義(適当)

707:デフォルトの名無しさん
15/06/30 01:13:42.18 Jhz+vTOP.net
Autocadは基本コマンド。

708:デフォルトの名無しさん
15/06/30 07:58:21.93 c40dQzwL.net
>>693 状態のセーブがすげー簡単
苦労は特にない

709:デフォルトの名無しさん
15/06/30 08:02:38.09 c40dQzwL.net
というかHaskellだろうが何だろうが
GUIなんかロジックの部分に比べれば簡単

710:デフォルトの名無しさん
15/06/30 12:03:29.96 xY5YXWOJ.net
そうやって【自称関数型】のヤカラはいつも逃げる
GUIで使えるアプリも書けない

711:デフォルトの名無しさん
15/06/30 12:19:59.61 avn7235t.net
Gtk2hsとか

712:デフォルトの名無しさん
15/06/30 12:55:10.53 g8mVBFW2.net
いや普通にwxHaskellでもなんでも使って書けるから。
ただ抽象化が巧く嵌らないから楽しくないだけ。

713:デフォルトの名無しさん
15/06/30 15:13:39.82 X6br0/jB.net
ウィンドウシステムで動く以上、オブジェクト指向が一番いいんじゃないの。
ウィンドウってオブジェクトそのものだし。

714:デフォルトの名無しさん
15/06/30 17:14:12.45 vxf+DpiB.net
メッセージを受け取る関数 Message -> IO () で引数をパターンマッチすればいいよ
Cのswitch文を使うウィンドウシステムと同じ

715:デフォルトの名無しさん
15/06/30 18:20:38.25 c40dQzwL.net
GUIどころかOSごとHaskellで書いた例:URLリンク(programatica.cs.pdx.edu)

716:デフォルトの名無しさん
15/06/30 18:42:24.07 X6br0/jB.net
>>706
2chで作ってたOSにも及ばない感じに見える。
世界の一流研究者が集って10年かけて作ったものがこれでは、Haskellの
実力が低いように見える。
ドヤって感じで出されると余計。
少なくとも2chで作ってたOSは、もう少し実用性があった。

717:デフォルトの名無しさん
15/06/30 18:51:10.78 X6br0/jB.net
昔、JSはCの二倍速いとか、JavaはCの20倍速いとか言われてて、ベンチマークが
2chのスレに貼り付けられてた。
今のHaskellは同じような感じがする。
JSは、アプリケーションを拡張するのに使えばとても楽な言語だし、Javaは
互換性やわかりやすさに焦点をあてた言語。
良い部分を宣伝したらいいと思うのだけど、どうも原理主義の人は欠点を
否定することに一生懸命になる。
Haskellはこういうことに向いてないね、でも出来ないわけじゃないよって
位で良いんじゃないのかな。

718:デフォルトの名無しさん
15/06/30 19:02:56.27 c40dQzwL.net
>>706 言いたいことはわからなくもないが全然「一流研究者が集まって」ないからw

719:デフォルトの名無しさん
15/06/30 19:04:08.01 c40dQzwL.net
>>707 のまちがいスマソ

720:デフォルトの名無しさん
15/06/30 19:10:15.18 9foLA8yU.net
2chのOSってhigeponが作ってたmonaでしょ。目的が違うし、実用性も同程度だと思うが。
そういえばhigeponさんも関数型erになったが最近どうしてるんだろう

721:デフォルトの名無しさん
15/06/30 19:55:09.60 FWhQ2ahg.net
Haskellが得意とする(向いている)アプリケーションとは何でしょうか。
また、なぜそれが他言語に比べてHaskellが有利だと言えるのでしょうか。

722:デフォルトの名無しさん
15/06/30 20:01:42.67 g8mVBFW2.net
>>712
構造を持ったデータの処理・操作。
理由は人智を超えない範囲で充実した型システム。

723:デフォルトの名無しさん
15/06/30 20:34:52.77 vxf+DpiB.net
リスクの高いアプリケーション
得意なことは何かではなく最悪のケースは何かを考えること
理由は型システム

724:デフォルトの名無しさん
15/06/30 20:54:40.33 FWhQ2ahg.net
>>714
リスクというのは人命ですか?
もしかして医療関係のアプリケーションでよく使われていますか?

725:デフォルトの名無しさん
15/06/30 21:54:36.59 vxf+DpiB.net
人命というのは何か違う気がする
単に死ぬことと意図的に殺すことを区別できなくなる

726:デフォルトの名無しさん
15/06/30 21:57:27.47 X6br0/jB.net
F-35にHaskellが使われたなら信じる。

727:デフォルトの名無しさん
15/07/01 00:19:00.28 hCLvX6t9.net
>>699
>> 状態のセーブがすげー簡単
これどういう意味? MonadIOの中だったらどこでもliftIO でファイル保存アクション実行できるよ、ってこと?

728:デフォルトの名無しさん
15/07/01 08:39:27.15 tJW6CsdE.net
>>704←固定観念に囚われてる愚か者の事例。

729:デフォルトの名無しさん
15/07/01 08:49:50.77 wl+QWyy/.net
ちょこっとかじった初心者ですが、
型システムのおかげでバグが出にくいっていう長所は
GUIアプリ作るときにも活かされますか?

730:デフォルトの名無しさん
15/07/01 09:37:31.97 I91Dcp9K.net
>>720
Haskellつかったらバグが自動的に減るのではなく、
強力な型システムのお陰で、型レベルのバグがコンパイル時に
検出できるだけ。Cなんかではポインタへの誤ったキャストが
コンパイルを通ってしまい実行時(システムが稼働したとき)にようやく
発見されるという惨事が相次いだので、コンパイル時に前倒し
してエラーを補足できるという点が期待されていた。
現実には型が合っていても実装を間違うことはあるので、
Haskell使ったら「自動的に」高品質になるというのは完全嘘だと思ってる。

731:デフォルトの名無しさん
15/07/01 10:28:08.57 tOajYpeJ.net
自分でHaskell書いたことのない奴が多すぎだろ
713くらいしかまともなこたえがない

732:デフォルトの名無しさん
15/07/01 11:45:24.51 gMCljQ/I.net
>>720
GUIはコロコロ仕様が変わるので
むしろバグっぽいコードも書けるというメリットのほうが大きい

733:デフォルトの名無しさん
15/07/01 11:45:40.65 zqTVEjze.net
型が強力なので、バグ以前に、適切な型を考えて、それに従って関数書けば
自然にプログラム書けて楽なことが多い。Type-directedプログラミングというか。

734:デフォルトの名無しさん
15/07/01 11:48:56.78 zqTVEjze.net
>>718 いや単に状態が陽だから、何をセーブすれば良いかわかりやすい、というだけ。
まあGUIアプリに限った話ではないか。

735:デフォルトの名無しさん
15/07/01 12:00:05.77 XEDFaQMZ.net
テスト駆動とかだったらテストをHaskellで書く筈だが
Type-directedはHaskellを書く機会を減らしてしまう諸刃の剣

736:デフォルトの名無しさん
15/07/01 14:49:29.48 rMwDHu3x.net
Haskellで書けばバグが完全に駆逐できるという話をよく聞く。
Haskellは並列化が効率的に行えるのでC++の10倍速いと言う記事を見た。

737:デフォルトの名無しさん
15/07/01 16:22:48.22 YQJkkFEW.net
リスクの最たる例が人命というなら、地球を一人の人間と捉えた場合、経済はその血流であろう。血流を止めると地球さんがヤバい
経済界に寄与するソフトウェアを他言語版より多く送り出しているならばHaskellはリスクと戦う最前線の言語だといえよう

738:デフォルトの名無しさん
15/07/01 18:22:25.85 NjN/zNsy.net
で、おまえらGUIアプリ書けるのか?
Haskellでカットアンドペーストできるエディタやペイントソフト書けんの?

739:デフォルトの名無しさん
15/07/01 18:22:57.88 NjN/zNsy.net
おまえらは「机上」でしか語れない

740:デフォルトの名無しさん
15/07/01 18:35:28.08 wHMLdS0x.net
クリックカウンターおじさんのエミュレーションやめろ

741:デフォルトの名無しさん
15/07/01 18:38:03.08 tOajYpeJ.net
GUIライブラリのコンポーネント使っていいなら誰にだって書ける。
もちろんHaskellでも問題なく書ける。エディタでバイト列収納しとくための
ロープから実装しろという話ならHaskellはかなり有利だ。

742:デフォルトの名無しさん
15/07/01 19:31:24.61 W0dcBNHQ.net
>>730
確かに、机上の空論からのぶっつけ本番は非常に危険だ
しかし机上を危険視するのは間違っている

743:デフォルトの名無しさん
15/07/01 19:53:03.17 XO0z7h0V.net
そもそも情報処理って机上がものいう世界だろ

744:デフォルトの名無しさん
15/07/01 19:53:39.62 XO0z7h0V.net
クリックカウンターおじさん本人なんじゃないか?

745:デフォルトの名無しさん
15/07/01 20:02:00.78 I91Dcp9K.net
机上の空論よりヘボくても動けるものを作れる奴が偉いとか典型的なマウンティング

746:デフォルトの名無しさん
15/07/01 20:16:46.99 zqTVEjze.net
>>726 QuickCheck?

747:デフォルトの名無しさん
15/07/01 20:18:47.95 zqTVEjze.net
>>727 それは嘘かhype

748:デフォルトの名無しさん
15/07/01 20:25:01.06 N2f2t6hF.net
>>732
Haskellが凄いという話はよく聞く


749:し、現代的なGUIエディタの実装に超有利という話も出てきた。 ところが、Haskellで書かれた著名なエディタは無いし、ライブラリやコンポーネントを使うなどと言うけど、 そのライブラリやコンポーネントはHaskellで書かれた著名なものがあるの? 極端な話、そんなに有利なら、Haskellで書かれたコンポーネントをそして APIを他の言語から使ってるんじゃないの。 凄い凄いという話をよく聞くものの、最終的にC/C++で書かれたライブラリを 呼び出せますよって話になる。 C/C++を呼び出してて本当にHaskellの凄いところであるゼロバグを実現できるの? 言っとくけど、C/C++は容易にバグが紛れ込むし、Haskellのようにゼロバグなんてことは無いよ? Haskellから呼び出すだけで、C/C++のバグも本当に消えるの?



750:デフォルトの名無しさん
15/07/01 20:30:36.90 WaFLqKtq.net
ぐうの音もでん

751:デフォルトの名無しさん
15/07/01 20:35:48.17 hkSyx5v6.net
C/C++ラッピングに頼るのは、国産OSを開発せずWindowsやUnixやLinuxに頼るようなものだ
Haskellネイティヴなライブラリへの置き換えが必要ではないか

752:デフォルトの名無しさん
15/07/01 20:40:40.77 RlBRpOsX.net
>>739 誰もそんなこと言ってない。
どこかよそで読んだなら、まともな話かどうか判定するからソース教えて

753:デフォルトの名無しさん
15/07/01 20:45:43.16 hhCpaelW.net
この世界、技術的に良いものが必ずしも広まらないことは日常茶飯事。
逆に、マイナーだから優れている、も成り立たないが。

754:デフォルトの名無しさん
15/07/01 20:56:44.98 4S8xRTlr.net
>>739
Haskellで自動回避できるのは型の不整合にまつわるバグであって、算法上のバグを回避できるわけじゃあないよな
システム記述言語としてのHaskellは、他言語に比べて特に凄いということはないよ
動かしながらバグを取る必要があるのはC/C++と同じ

755:デフォルトの名無しさん
15/07/01 20:59:56.29 WaFLqKtq.net
まあ、最近Facebookが出して世間を賑わしてるリアクティブプログラミングも元はHaskellで作られたやつだ。
あと、テストライブラリのQuickcheckも色んな言語に輸出されてるね。
思うんだけど、Haskellerのみんなの興味が、売れるアプリ、広く使われるソフト、
で必要とされるもんとズレてんじゃないかな。
1. その言語を使える技術者の確保が容易
2. ハード(スマホ)の最新機能がすぐ使える、
ドキュメントが豊富

756:デフォルトの名無しさん
15/07/01 22:46:09.54 SBuzyDQs.net
ArrowがあればMonadは要らんのやな
最初からArrowにしとけばよかったやん

757:デフォルトの名無しさん
15/07/01 22:54:31.49 hkSyx5v6.net
元はHaskellで作られたのに実践は他言語だったの?
Haskellは何か実践的開発上の問題を抱えてるの?

758:デフォルトの名無しさん
15/07/01 23:08:08.48 1n3wggjU.net
つまんない煽り愛してないでまともな話しろ

759:デフォルトの名無しさん
15/07/01 23:09:21.21 WaFLqKtq.net
>>747
もちろんHaskellのリアクティブライブラリもそれなりに使えるもんだったし、以降今に至るまで派生ライブラリがたくさん作られた。
でも、javascriptの方がより賑わっていて(開発者が多くて)Facebookにも資金力がとても高い、ってことさ。
つまり、Haskellの弱さは人がいないことだ、と俺は思う。
なぜ人がいないかは、理由は色々あるけど、外から見て何が得意なのかがよくわかんないつーのが大きくて、それはHaskellでの目に見える成果があんまり無いからで、その理由は人がいないからで、つまり

760:デフォルトの名無しさん
15/07/01 23:32:51.19 W0dcBNHQ.net
>>747
逆に他言語で実践できない部分にガラパゴス化という問題があるとも言える
ガラパゴスが強いと思うか弱いと思うかは人それぞれ

761:デフォルトの名無しさん
15/07/01 23:50:13.91 j1v8qj3k.net
つまりクリックカウンターおじさんの言ってることは正しい面もある、と?

762:デフォルトの名無しさん
15/07/02 01:00:22.82 xB5xsyxT.net
言語仕様の話がしたいのか、ライブラリ群の話がしたいのか。

763:デフォルトの名無しさん
15/07/02 01:43:36.68 0H4A+sBi.net
技術的内容を理解していない知ったかぶりの言葉遊びは無用。よそでやれ

764:デフォルトの名無しさん
15/07/02 06:15:08.75 0QJ6vZJG.net
言葉遊びをやめさせるには沈黙するインセンティブが必要
黙秘権とか
逆に、対案を出せなど沈黙しないことが強く求められれば言葉遊びはもっと酷くなる

765:デフォルトの名無しさん
15/07/02 09:19:10.46 RsQjnldo.net
”クリックカウンターおじさん”という名誉棄損の呼び名を確認。

766:デフォルトの名無しさん
15/07/02 09:50:57.63 L8xarZNp.net
クリックカウンターのような状態遷移をHaskellでは作れないという批判?

767:デフォルトの名無しさん
15/07/02 10:03:54.46 u7x11Nqb.net
クリックカウンターおじさんの問題提起については評価しないとだめだな。

768:デフォルトの名無しさん
15/07/02 10:28:08.52 zhB7tSAg.net
環境構築(cabal)がクソでライブラリを探すのも入れるのも更新するのも面倒くさいってのも有ったんじゃない
Stackでどうなるか

769:デフォルトの名無しさん
15/07/02 11:10:25.42 e+SQ5knv.net
著者が挙げている「クリックカウンター」や「お絵かき」の類を作成するのに特別なexpertiseは不要で、
単に使用するGUIライブラリ・グラフィックスライブラリのドキュメントが読めれば充分なので、
その趣旨は私にはまったく判然としません(当該の記事で著者がOCamlで「お絵かきロジック」を
実装してみせよと要求する一方で自身ではJavaScriptによるそれを公表していない点も気になります)。
もちろん、OCamlであれHaskellであれ破壊的代入の類の副作用を使用せずに書くのもなんら困難ではありません。

770:デフォルトの名無しさん
15/07/02 13:57:23.04 y1SlVF6x.net
字数増やせば賢く見えるわけじゃないんですよ

771:仲本だいすけ
15/07/02 15:06:12.36 ZQFEgiVc.net
あの疑似科学野郎を黙らせるのになぜ半年もかかったのか?

772:デフォルトの名無しさん
15/07/02 17:11:55.72 L8xarZNp.net
>>758
環境のクソさのお陰でわりと布教しづらかったので stack にはマジ期待してる
>>759
なんら困難ではない。。。かなぁ???

773:デフォルトの名無しさん
15/07/02 17:35:08.64 xB5xsyxT.net
破壊的代入なしで書くのは別に困難じゃないだろ。
入出力そのものを副作用だと言い出すならどんな言語でも無理だしな。

774:デフォルトの名無しさん
15/07/02 17:46:38.81 FcRiDZyX.net
>>759
当事者ご降臨ですかw
確かに保身第一、全く相手にしてませんが何か?っていう答え方だな

775:デフォルトの名無しさん
15/07/02 18:22:32.80 aW/wUO6R.net
>>761
おまえらの不徳の致すところ

776:デフォルトの名無しさん
15/07/02 18:30:48.79 e+SQ5knv.net
おいおい、単に URLリンク(qiita.com) からのコピペだぞ。検索もできんのか…

777:デフォルトの名無しさん
15/07/02 18:55:57.21 y1SlVF6x.net
宣言型プログラミング言語スレで脳内設定エスパーしろとな

778:デフォルトの名無しさん
15/07/02 19:00:17.41 xB5xsyxT.net
Ocamlアイドル ‏@no_maddo 24時間
追記部分があるのを知らなかった、めっちゃ面白かったです
関数型言語 - 『関数型プログラミングに目覚めた!』のレビュー(Day-1)
on @Qiita URLリンク(qiita.com)

kenokabeさんの謎クリックカウンタとお絵かきのネタは仙台でも大人気だ!

779:デフォルトの名無しさん
15/07/02 19:26:05.17 gqhA8KsA.net
これが何に使えるのかよくわからない。

780:デフォルトの名無しさん
15/07/02 21:46:14.33 E90eWw9y.net
>>766-767
その程度のために Googleモナドを持ち出すなど軟弱な

781:仲本だいすけ
15/07/03 01:48:03.52 RZmOyo0m.net
                  ,.-―: ̄`ー::::::::::、
                /::::::::::::.::::::::::::::::::::::::::::`::、、
               /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
               l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
               l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
              l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
              l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
              ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
             ヽ:::::    ̄ .)::;  l  ̄   l::::/
              、:::::..   /:::; .,-、     l:::/、
               ::::::::  ゝヽ- ー' 、     l::/,
                ,:、:: / ,--、,-.、_ l     /
                 、::、 `ー ̄-'    /
                   、::ヽ      /:
                 r‐''''^¨^⌒ ̄ ̄ ̄ヽ
               ,ノ`,           \
              ノ/             ヽ
             ι.}           λ    )
             ヽ(,.          ノ!   r'
               (          l  .,/
              ノ,,,,,,,,,,,,,,,,,,,,,,,,,,,,丿へ
             ノ              ,)
             (  ∵ ∧∵    /,,丿
             \,,,,/人\__ノ   /
             (  ) (__)    (   )
            《  l (___)   《 ̄ ̄》
           《__(____)  《____》

782:デフォルトの名無しさん
15/07/03 03:37:23.69 aag7hyI7.net
180°回る首

783:デフォルトの名無しさん
15/07/03 08:29:08.65 8+5j5k8x.net
>>761
相手が弱者だと思って戦いを始めるやつは撤退する口実を作れないから泥沼化する
強敵ならいつでも撤退を正当化できるのに

784:デフォルトの名無しさん
15/07/03 08:38:57.07 R0ApVOfB.net
>>763
入出力は副作用でしょ普通
入出力無しにGUIを描くと言ってるのと同じで矛盾してる

785:デフォルトの名無しさん
15/07/03 08:39:40.10 uImfavx2.net
あほか

786:デフォルトの名無しさん
15/07/03 08:41:04.32 wl7u/SNJ.net
>>774
意味論による。

787:デフォルトの名無しさん
15/07/03 08:46:11.05 R0ApVOfB.net
>>776
言ってる事が理解できないので詳しく
入出力で参照透過性を維持できる説明もよろ

788:デフォルトの名無しさん
15/07/03 09:04:39.28 wl7u/SNJ.net
>>777
IOモナドの仕組みくらい自分で調べたらよろしい。
そして、グラフ書換系のどこにも副作用なんかない。

789:デフォルトの名無しさん
15/07/03 09:11:48.16 R0ApVOfB.net
>>778
グラフ書換系はGUIとは関係ないだろう
はぐらかさないで説明ヨロ

790:デフォルトの名無しさん
15/07/03 09:15:30.38 wl7u/SNJ.net
>>779
IOモナドは世界状態RealWorldを取るStateモナドと同じ意味論を与えることができる。
Stateモナドに副作用がないのと同様にIOモナドはモナドにも副作用はない。これが1。
IO a を RealWorld -> (RealWorld, a) と元の形に直した上で
Haskellのグラフ書換系上で入出力がどう見えるか考えてみればいい。これが2。
これでわからんなら私のせいではない。

791:仲本だいすけ
15/07/03 09:46:07.14 6Fdm7Fxt.net
疑似科学おじさんまだいるの?病院行こうよ

792:デフォルトの名無しさん
15/07/03 09:57:24.37 p7lUbcZE.net
岡部氏の「もっと世界観を」には賛成。
しかし関数プログラミングやFRPは銀の弾ではないとも思う。
なぜこうも銀の弾が出てこないのか?

793:デフォルトの名無しさん
15/07/03 10:02:29.75 Iifsm05F.net
そんな事より毛ブログがなんで更新されないのかな?

794:デフォルトの名無しさん
15/07/03 10:17:59.41 R0ApVOfB.net
>>780
グラフ書換系からモナドがどう見えるかは関係ない
実際にIOモナドから値を取り出し、副作用を伴う処理を使う際
参照透過性を維持できるという説明をよろしく

795:デフォルトの名無しさん
15/07/03 10:19:49.54 vDmQcknf.net
まあとりあえずこれを読めよ
URLリンク(d.hatena.ne.jp)

796:デフォルトの名無しさん
15/07/03 10:26:38.47 R0ApVOfB.net
>>785
そのリンク先の説明は理解できるが
今レスしている人はどの趣旨の説明でもない

797:デフォルトの名無しさん
15/07/03 10:26:38.81 R0ApVOfB.net
>>785
そのリンク先の説明は理解できるが
今レスしている人はどの趣旨の説明でもない

798:デフォルトの名無しさん
15/07/03 10:28:25.82 wl7u/SNJ.net
IOモナドの表現getCharが複数あってもRealWorldの値が違うので
決してノードが共有されないことに気が付かなかったんですかねえ。
グラフ書換でノードが共有されることと参照透過性との関係が
理解できてない可哀想な子だったか。

799:デフォルトの名無しさん
15/07/03 10:32:05.52 R0ApVOfB.net
あ、すまん確かに3と同じ事いってるね
タプルをRealworld aと勘違いしてた

800:デフォルトの名無しさん
15/07/03 10:39:21.05 R0ApVOfB.net
>>788
よく読んでいなかったよ謝る

801:仲本だいすけ
15/07/03 10:48:00.79 Dt4z3lub.net
>>782
ThinkDifferent(笑)

802:デフォルトの名無しさん
15/07/03 10:49:58.03 aSIkPSGQ.net
駱駝さん、アホに構ってんと、仕事しようよ…

803:デフォルトの名無しさん
15/07/03 11:24:59.81 p7lUbcZE.net
> Haskell には副作用はない。なぜなら、Haskell が作るのは命令書のみで、それが実行されるのは Haskell の外での話だからだ。
そういえば、この解釈は酷い解釈だったな

804:デフォルトの名無しさん
15/07/03 11:35:30.05 8+5j5k8x.net
>>793
・副作用は定義した時ではなく実行時に発生する
・引数 (RealWorld) は関数を定義した時ではなく呼び出した時に渡される
ほぼ同じ内容だ
同じ内容に優劣をつけるのは言葉遊びだ (遊ぶなとは言っていない)

805:仲本だいすけ
15/07/03 11:39:29.06 TviClge2.net
楽しいから続ける(笑)

806:仲本だいすけ
15/07/03 12:04:29.45 ri2L7Lgt.net
         ,.-―: ̄`ー::::::::::、
       /::::::::::::.::::::::::::::::::::::::::::`::、、
      /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
      l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
      l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
     l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
     l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
     ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
    ヽ:::::    ̄ .)::;  l  ̄   l::::/    < 排便ダン
     、:::::..   /:::; .,-、     l:::/、
    ,―::::::::  ゝヽ- ー' 、    l::/,、ヽ
     l,、,、,,:、:: / ,--、,-.、_ l    /::::::,、,、l
   l,、,、,、,、,、::、 `ー ̄-'   /:::::::::::,、,、l
   l,、,、,、,、,、,、::ヽ      /::::::::、,、,、,、,ノ:\
      /⌒\〆',  `  ̄ ´  ゝ/⌒\
    /  ノつ\ ・    ・  /⊂  ヽ!
o0○ノ  /  3  \ (::::⌒ヽ / とノ\ ヽ○0o
(    /、_ノ\   Y `(_、_)   /  \´  )゚
 \_)    `ヽ   : :;;*:;   : : : |    (_ノ
         人__;;:;;、___ノ          ヽヽ        ヽヽ
             ;:;;:;;:;,,           ─┐ |  |   ─┐ |  |
          ∬ ;;:;::.;::.::;::..:;:..: ∬          /  |  |      /.  |  |
      ・~   ;::;.:;:;:;:;:.:;:.:::.;:;:;.:.:.:          ノ    ノ  ┐ ノ    ノ  ┐
          ∬;;;:::;;;:;:.:;:.::.:;;.:.;.:;.:; ∬                 ┴    ヽヽ     ┴
              :"

807:デフォルトの名無しさん
15/07/03 12:15:29.28 p7lUbcZE.net
>>794
ほぼ同じ内容だろうが、それらはどれも酷い解釈だと思うよ

808:デフォルトの名無しさん
15/07/03 12:36:08.66 IUu1So5+.net
何が酷いの? IOが一級値である以上、最も正確な解釈だと思うが。

809:デフォルトの名無しさん
15/07/03 12:38:18.64 InleWrcM.net
むしろそれ以外に、実際の実行結果に合う解釈はあるのか?

810:デフォルトの名無しさん
15/07/03 15:16:07.46 msRG1Yik.net
>>796
顎の両脇の部分が、後ろで済ませたとぐろ糞に見える

811:デフォルトの名無しさん
15/07/03 15:58:45.53 Vi+qPEKL.net
Prelude> let x = putStrLn "hello" in x >> x
hello
hello
Prelude> let x = putStrLn "hello" in seq x x
hello
Prelude>

812:デフォルトの名無しさん
15/07/03 19:01:10.98 V10CPSDi.net
型=値の集合と思ってると IO でラップされた型は一体どんな値なのかと気にしてしまうんだね。

813:デフォルトの名無しさん
15/07/03 19:04:32.10 Vi+qPEKL.net
>>802 それはIOに限らず抽象データ型一般について言えるかも

814:デフォルトの名無しさん
15/07/03 21:18:44.48 XD0nd274.net
IO aが抽象データ型だとするとb -> IO aがFactoryMethod
IOはコンストラクタが隠蔽されているのだから必然的にそうなる

815:デフォルトの名無しさん
15/07/03 22:59:59.80 8flj3gJm.net
言いたいことはわかるが空な多相型じゃなくてτ1 -> IO τ2とか書いてくれ(笑)

816:デフォルトの名無しさん
15/07/03 23:22:54.07 XD0nd274.net
そもそも一番肝心な(->)のコンストラクタがない
Haskellの半分以上はコンストラクタやパターンマッチでは説明がつかない

817:デフォルトの名無しさん
15/07/04 02:18:23.55 XsL/EKLB.net
半分以上のHaskell教えてよ

818:デフォルトの名無しさん
15/07/04 09:50:27.87 WNuVOXDD.net
Haskell は数学を連想させるので絶対流行らん。

819:デフォルトの名無しさん
15/07/04 10:25:08.25 8ixaKuBt.net
>>808
その「ので」が「今日は天気が良い『ので』どこかに出かけよう」ぐらいエエカゲンなんだよなあ

820:仲本だいすけ
15/07/04 10:41:07.54 uNR/QH/o.net
                  ,.-―: ̄`ー::::::::::、
                /::::::::::::.::::::::::::::::::::::::::::`::、、
               /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
               l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
               l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
              l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
              l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
              ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
             ヽ:::::    ̄ .)::;  l  ̄   l::::/
              、:::::..   /:::; .,-、     l:::/、
               ::::::::  ゝヽ- ー' 、     l::/,
                ,:、:: / ,--、,-.、_ l     /
    ,.:':'゙'゙'゙:゙'゙':';.        、::、 `ー ̄-'    /
   r゙ ,.: :;;;:: : : :           、::ヽ      /:
   | : ::::~';::--ー'ー-----ーー;;:'゙ .: :` ‐- 、  |
  ,i    ::::::::::::::::::::::::::::::: ::: :ヾ        i
  r'     ::::::::::::::::: : : :::::: :::::  ::::. .      /
  |      :::::::::: : : : : ::: ::  ::         イ
  i      : : ::::::::::: : : ::::::: :         |
  |      ,.;イ-- .,           ,... -' i
   i      ,.;':/   ゙'ー-.,_ i    ,.イ::  /
  .i::::   /:/        ̄i   / ゙i   |
  │::  ノ::/         |   i   |  |
 r':: イ:::::i゙            |  |   i   |
 |:: | ヽ '-.,         ヽ 〈    ヽ ヽ.,
 i, , '-, ゙'ー'ー'          ヽ、`,ー、  `'ー'ー'

821:デフォルトの名無しさん
15/07/04 11:47:31.61 D//5Uocc.net
筒井康隆が新潮10月号(9/7発売)に最新長編『モナドの領域』330枚一挙掲載

822:デフォルトの名無しさん
15/07/04 14:12:51.24 WvwJxr10.net
Haskell は門限が7時の女子大生を連想させるので絶対流行らん。

823:デフォルトの名無しさん
15/07/04 16:46:21.33 rWY2qCze.net
Haskell 擬人化するなら眼鏡で想像するひと多そう。

824:デフォルトの名無しさん
15/07/05 03:00:57.48 18u325sL.net
URLリンク(jbbs.shitaraba.net)
  ↑  ↑  ↑  ↑  ↑

825:デフォルトの名無しさん
15/07/05 03:18:53.53 5EFP5F9v.net
リンク先政治広告なのでみなくてよろし

826:デフォルトの名無しさん
15/07/05 11:32:05.80 j/NgsVfb.net
長期的に考えるんだ
最初は眼鏡で途中から眼鏡を外せば流行ると考えるんだ

827:デフォルトの名無しさん
15/07/06 00:22:13.25 wlw6otNx.net
使うメリットが無い。
デメリットは多いのに。

828:デフォルトの名無しさん
15/07/06 04:07:14.46 W9Wle9it.net
毛を引き寄せてしまった程の黒魔術的魅力がHaskellにあるのだろう

829:デフォルトの名無しさん
15/07/06 04:12:56.58 G+yljX6j.net
goよさそうだなと思って覚え始めたけど型定義が貧弱すぎてやる気大幅ダウン
Haskellは禁断の果実だった

830:デフォルトの名無しさん
15/07/06 10:19:51.08 9VlVzieP.net
システムプログラミング言語ならhaskellやった人はgolangよりrust結構気に入るだろうと思う
代数的データ型、型クラス、型推論、immutableがデフォルト、パターンマッチ、
メモリリークをコンパイルエラーにする
と結構 ml likeな言語

831:デフォルトの名無しさん
15/07/06 10:24:54.61 9VlVzieP.net
>>818
毛を引き寄せたのはhaskellじゃなくてjsだろ

832:デフォルトの名無しさん
15/07/06 18:54:20.21 yIxlkBRi.net
痴呆症ブログ更新きたよ!
749 名無しさん@ゴーゴーゴーゴー! 2015/07/06(月) 14:17:10.21 ID:IaVh3M450
URLリンク(kenokabe-techwriting.blogspot.jp)
おかえり!入院しろ!

833:デフォルトの名無しさん
15/07/06 21:10:08.11 EN2KuOqG.net
>>820 いいことを聞いた、ちょっと触ってみようかな

834:デフォルトの名無しさん
15/07/06 21:43:24.49 G+yljX6j.net
普及してる言語の中でミスが起きないよう設計されてるやつが欲しくてさ
Rustは人口少ないしScalaよりさらに関数型で安全そうだけどじゃあHaskellでいいじゃんってなる

835:デフォルトの名無しさん
15/07/06 22:13:00.63 pYzRJ5bG.net
elixirとか

836:デフォルトの名無しさん
15/07/06 22:38:54.30 /jetTYu7.net
末尾呼び出しが使えないとやる気が出ないね
ループでしか書けないからね

837:デフォルトの名無しさん
15/07/06 23:08:12.61 G+yljX6j.net
静的型
直和型
再帰型
抽象型
独自(ドメイン固有)型
型推論
ダブルディスパッチ
高階関数
map/filter/fold
末尾再帰最適化
オブジェクト指向でもこれくらいサポートしてほしい

838:デフォルトの名無しさん
15/07/06 23:11:36.25 8//4HfJE.net
相変わらず岡部健の記事は狂ってて面白い

839:デフォルトの名無しさん
15/07/06 23:28:12.05 IO/OfGDx.net
>>824
rustは日本人ユーザが少ないだけでコミュニティは盛り上がってる

840:デフォルトの名無しさん
15/07/07 00:34:34.08 /AiLg+DV.net
岡部が他人のコードを勝手に、不完全に書き換えて実行して
その結果を叩いてるぞ

841:デフォルトの名無しさん
15/07/07 01:15:52.91 6n40dgbK.net
岡部の記事だけを読むと、説得されかけるのは疲れているからだろうか?

842:デフォルトの名無しさん
15/07/07 01:30:24.54 0l2OmbIX.net
>>824
rustはc,c++と同じ低レベルプログラミング言語だから
haskell、scalaとは被らないよ

843:デフォルトの名無しさん
15/07/07 01:44:46.81 5T5xC6ja.net
「ミスが起きない」の意味が違う�


844:セよな。 HaskellとRustでは型に意図された機能がぜんぜん違う。



845:デフォルトの名無しさん
15/07/07 04:38:19.84 wEQ5fYPF.net
>>833
どういう部分が?
所有権という概念が入るだけで、型付けは結構強めだと思うが

846:デフォルトの名無しさん
15/07/07 05:07:24.51 wEQ5fYPF.net
>>831
洗脳…ですかね

847:デフォルトの名無しさん
15/07/07 08:27:24.02 5T5xC6ja.net
>>834
Rustは高階カインドやGADT使えないでしょ。モナドすらない。
だけど線形型は使えて(所有権)、要するに基本のHindley-Milner systemからの
強化方向とその背景にある思想が全然違う。
データの構造に対する表現力を求めるのとリソース管理を求めるのと。
なおどっちも突っ込むと人智を超え始めるのはATSを見ればお分かりの通り。

848:デフォルトの名無しさん
15/07/07 08:30:37.69 6KFd5cV4.net
Rustは低レベルな世界に関数型の表現力と安全性を持ち込もうとしている言語。
最初はOCamlで開発されていたからか、letとかOptionとかML系の匂いはする。
ただし簡潔さよりもゼロオーバーヘッドを優先しているから、冗長な表記が多々含まれる。
あと型推論は関数定義内だけに適用されるから、エラーメッセージが見当外れの場所を指さない一方、
borrow checkerのエラーはすごく把握しづらい。impl書いている時は特に。
自分がいかにGCに依存し、リソース管理を怠っていたかをこれでもかという程思い知らせてくる言語。

849:デフォルトの名無しさん
15/07/07 08:31:10.23 bP16dll8.net
Rustなんて放り投げてATSやろうぜ!

850:デフォルトの名無しさん
15/07/07 11:38:06.78 ZG49EUnh.net
これが超えちゃいけないラインってやつか
トランポリンとかモナドとかよりもっと抽象度高い系の片鱗を味わったぜ

851:デフォルトの名無しさん
15/07/07 12:46:53.46 KLvjH7rL.net
岡部健・・・・・・。

852:デフォルトの名無しさん
15/07/07 15:14:42.99 kS7BAnfS.net
>>838
岡部究(master_q)さん、暇なんですか?

853:デフォルトの名無しさん
15/07/07 15:31:19.79 AZjd+yQY.net
ParsecとTrifectaってどう違うの?

854:デフォルトの名無しさん
15/07/07 15:36:54.07 kS7BAnfS.net
>>842
Parsec の改良実装が Trifecta だそうです(TwitterのTL調べ)

855:デフォルトの名無しさん
15/07/07 16:41:16.20 kvoehb1f.net
まさかUCLA卒の情報技術者を自称する岡部が、
メモリを食いつぶしてることの裏を取ってないわけねーだろ。
これには何か事情があるんだろう。

856:デフォルトの名無しさん
15/07/07 16:44:08.49 kvoehb1f.net
まとめ:
岡部「破壊的代入を使わないクリックカウンターやお絵かきロジック(マウスのドラッグ)はFRP(自称)でなければ書けない」
→OCamlでもHaskellでも瞬殺
→岡部「再帰でメモリリーク(※スタックオーバーフローの意)する」
→末尾再帰なのでスタックオーバーフローしないし、実際のメモリ消費量も増えていない。
 岡部の示した「証拠画面」はメモリ不足ではなくプロセスを強制終了しただけ。

857:デフォルトの名無しさん
15/07/07 16:57:06.07 AzQt5h10.net
マジで末尾再帰の最適化を知らなかったのか、kenokabe独自定義で違う意味なのか、どっちなんだ?
前者だとちょっとガッカリ…

858:デフォルトの名無しさん
15/07/07 17:57:25.43 T57Vd7z3.net
メモリリークはバズワードであってだね・・・・

859:デフォルトの名無しさん
15/07/07 18:14:46.72 50EUtPEU.net
kenokabeさんはもう許されていいとおもう

860:デフォルトの名無しさん
15/07/07 18:17:56.32 Ra6qpxUV.net
Haskellは強制されても習得できない難しい言語だからこそ非人道的事案は少ない
それに比べて関数型という安易な言葉に苦しめられる人は多い

861:デフォルトの名無しさん
15/07/07 20:57:42.46 strljqHr.net
どこかのスレでツリートラバースするのに再帰を使うのは良くないマナーと書いたら、
末尾再帰と言われたのだが。

862:デフォルトの名無しさん
15/07/08 00:23:41.84 D8OEoYJf.net
>> 850
なぜ良くないの?

863:デフォルトの名無しさん
15/07/08 00:43:21.45 lu3S4Qgm.net
>>>845
OCaml版はloop_at_exit使ってるのがダメと指摘されますた><
Graphics.wait_next_eventかGraphics_js.loop使ってください

864:デフォルトの名無しさん
15/07/08 01:57:29.30 T1Ir4r2m.net
>>845
末尾再帰はあのコード例では関係なくて、イベントハンドラを経由したtrampolineになってるのでスタックオーバーフローしない、が正しそう。

865:デフォルトの名無しさん
15/07/08 03:26:31.55 gcJIUX06.net
>>851
末尾再帰の最適化がかからない言語は使うべきではないともレスがあったな。

866:デフォルトの名無しさん
15/07/08 05:37:16.57 D8OEoYJf.net
>> 854
よく分かりませんが、ところで、あなたにレスを見て気になって、調べて初めて知りました。
Haskellって末尾再帰の最適化って無いんだね。
ずっと勘違いしてた。気付かせてくれてありがとう。

867:デフォルトの名無しさん
15/07/08 06:38:51.11 k4MH4D3R.net
>>855
>Haskellって末尾再帰の最適化って無いんだね
TCOが無いんじゃなくて、あくまでサンクの問題。

868:デフォルトの名無しさん
15/07/08 07:15:31.29 asOwE27P.net
parsecとtrifectaは比較するようなものじゃないよ

869:デフォルトの名無しさん
15/07/08 08:22:34.09 SmYj13jC.net
>>857
kwsk

870:デフォルトの名無しさん
15/07/08 08:29:06.72 gcJIUX06.net
>>855
そもそも最適化が無い言語とはC言語のことで、Cは使うなHaskellを使えと言う話だったのだが。

871:デフォルトの名無しさん
15/07/08 08:53:04.13 Hcg+sLDh.net
Haskellでサンクをインライン展開する最適化ってできるんじゃねえの
サンクが末尾にあったらTCOと同じだろ

872:デフォルトの名無しさん
15/07/08 09:03:37.61 k4MH4D3R.net
>>860
できる。ghcなら-O2つければいい。

873:デフォルトの名無しさん
15/07/08 09:44:23.49 gcJIUX06.net
そもそも、Cの関数呼び出しはアドレスを指定してジャンプ、ループは
オフセットを指定してジャンプ程度の違いしかないので、インストラクションに
関しては大して違いが無いのだが。
どうもハスケラーは関係ないことを指摘して、「だから◯◯はダメだ」と言い出す
傾向が強い。

874:デフォルトの名無しさん
15/07/08 10:56:59.54 k4MH4D3R.net
そりゃTCO効いた後なら違いは殆どなくなるにきまってる。

875:デフォルトの名無しさん
15/07/08 11:02:57.48 Mh0VppoT.net
「そもそも、Cの関数呼び出しはアドレスを指定してジャンプ、ループは
オフセットを指定してジャンプ程度の違いしかないので」
はあ???

876:デフォルトの名無しさん
15/07/08 11:10:43.42 +0ZOrsx3.net
>>863
「TCO効いた後なら」同じだが、>>862 は「Cの関数呼び出し」と言ってるから
Cも関数呼び出しもまったくわかってない。プログラムわからないんだったら出てくんな。

877:デフォルトの名無しさん
15/07/08 11:28:35.90 k4MH4D3R.net
>>865
まさかスタック積むことすらわかってないとかなんかね?

878:デフォルトの名無しさん
15/07/08 15:11:37.94 TEEbED7E.net
久しぶりにきたら荒れてるな
Haskellは破壊的代入をしようとすると面倒なのがつらい。
巨大な1次元配列の任意の場所を参照しながら大量に書き換える処理とか
純粋性を保ったままやろうとすると凄いことになる。
*例えば画像データの一部に別の画像をmixするとか

879:デフォルトの名無しさん
15/07/08 16:24:24.26 Eo9ZYfU/.net
>>866
スタックに引数、戻り値と積んでからジャンプするんだから、アドレスを渡す
関数ならスタックは積む必要が無い。
再帰してるんだから。
ハスケラはどうも自分は天才で自分以外は全員馬鹿と思い込む傾向がある。

880:デフォルトの名無しさん
15/07/08 16:25:04.00 Fj3AV/LF.net
相変わらず殺伐としている。
いつものマウンティング合戦。

881:デフォルトの名無しさん
15/07/08 16:26:57.55 Fj3AV/LF.net
多分、ハスケラではなくオカマラーだよ。
なぜかオカマちゃんが出没するのだ。

882:デフォルトの名無しさん
15/07/08 16:51:49.63 TEEbED7E.net
ハスケラと一緒に仕事したい(自社製品を一緒につくりたい)けど
怖い人多そうで誘いづらい

883:デフォルトの名無しさん
15/07/08 17:09:26.71 F0vddBGo.net
「Cも関数呼び出しもまったくわかってない。プログラムわからないんだったら出てくんな。」
「まさかスタック積むことすらわかってないとかなんかね? 」
毎日こんなこと言われると思う。

884:デフォルトの名無しさん
15/07/08 17:22:12.92 TEEbED7E.net
なにそれ怖い
製品完成する前に心折られそう

885:デフォルトの名無しさん
15/07/08 17:24:08.22 g9xxt+x4.net
「そもそも、Cの関数呼び出しはアドレスを指定してジャンプ、ループはオフセットを指定してジャンプ程度の違いしかないので」 とか
「スタックに引数、戻り値と積んでからジャンプするんだから、アドレスを渡す関数ならスタックは積む必要が無い。再帰してるんだから。」とか
(しかもTCOの話をしてるのに)、本当にCも関数呼び出しもわかってない知ったかぶりがHaskellerを中傷してるだけ。
それ以上でもそれ以下でもない。

886:デフォルトの名無しさん
15/07/08 17:29:09.36 TEEbED7E.net
穏やかなハスケラいないかな
簡単なプログラムができる程度の初心者でもいいんだけど
一緒に自社製品つくりたい
(ただし売上あるまで一緒に無給)

887:デフォルトの名無しさん
15/07/08 17:33:01.82 3bDYKzqv.net
>>874
どうもハスケラーは関係ないことを指摘して、「だから◯◯はダメだ」と言い出す
傾向が強い。

888:デフォルトの名無しさん
15/07/08 17:34:43.10 3bDYKzqv.net
最後には「Javaの話ししてるのにJavascriptと勘違いしている」などと言い出しそうだな。

889:デフォルトの名無しさん
15/07/08 17:37:24.50 ikFma15C.net
わかってないから馬鹿にされてるんじゃなくて、
わかってないのに自覚せず威張ってるから馬鹿にされてるんだが…。
そういう奴がいて、間違いを指摘すると逆ギレされる職場とか絶対嫌。

890:デフォルトの名無しさん
15/07/08 17:39:55.04 coR9sNH7.net
末尾呼び出し最適化は再帰だけじゃないよ

891:デフォルトの名無しさん
15/07/08 17:46:11.37 TEEbED7E.net
馬鹿にするのも逆ギレもよくないとおもう
そしてこのスレが荒れるのも彼の呪いじゃないかとおもう
もうそっとしておくのが一番いいとおもう

892:デフォルトの名無しさん
15/07/08 17:48:42.74 3bDYKzqv.net
「Cは再帰の最適化が無いから使うべきではない、Haskell使え」と言う話に、
Cは再帰の最適化が必要ないのに何言ってんの?と答えた。

893:デフォルトの名無しさん
15/07/08 17:54:30.07 3bDYKzqv.net
Haskellの最適化って他の言語では必要ないものでしょ。
「遅延呼び出しによって必要のない計算を無くせるスゴイ!」
他の言語では最初から必要ない計算はしないからそんな最適化は必要ない。
自らゴミを持ち込んで
「ゴミを減らせたスゴイ!Cはゴミを減らせないから使うべきでない!」
とか言い出すのがハスケラー。

894:デフォルトの名無しさん
15/07/08 17:54:46.50 jdKxxZpi.net
いろいろと誤解している気がする

895:デフォルトの名無しさん
15/07/08 18:02:40.05 7bDc6WAX.net
まず、末尾再帰をループに変換する最適化は、CでもHaskellでも可能で、実際にGCCでもやってる。
それはさておき、Cではループを末尾再帰で書いたりしないから、そんな最適化はいらない、という意見もそれはそれでわかる。
末尾再帰使わないのに、末尾再帰最適化がないからダメ、なんて言ってる奴がいたらそいつがおかしいので具体的ソース希望。

896:デフォルトの名無しさん
15/07/08 18:11:09.96 LC6Y88mm.net
必死に藁人形作ってるだけだから構ったら駄目だよ
末尾再帰最適化を知ってて制御構文を知らないなんて
そんな支離滅裂な馬鹿を前提としてる時点で察しろと

897:デフォルトの名無しさん
15/07/08 18:13:26.90 7bDc6WAX.net
で、CでもHaskellでも、末尾呼び出し最適化されていない普通の関数呼び出しは、
戻り番地や、まだ使う変数をセーブしておくためにスタックを消費する。
(引数渡しにスタックを使うこともあるけど、そうでなくても)
(再帰でも、再帰でなくても)末尾呼び出しの場合、そのセーブが不要なので、
ただのジャンプ(と引数のセット)だけに最適化できる。
この最適化は関数型言語の処理系では普通は実装されている。
Cでも全くできないことはないと思うが、いろいろ面倒そうなので
やってるコンパイラは寡聞にして知らない。

898:デフォルトの名無しさん
15/07/08 18:14:38.28 3bDYKzqv.net
>>884
変換する最適化という言い方が、ハスケラーっぽいなあ。
Cは積む必要のないものは積まないんだから。
スタックに何も積まなければループも関数呼び出しも大した違いは無い。
そういうわけでこれからは、最適化しないと使い物にならないHaskellと考えていただこう。

899:デフォルトの名無しさん
15/07/08 18:14:42.05 7bDc6WAX.net
>>885 スマソ。何となくちゃんと説明しないと俺の気が済まなかった。

900:デフォルトの名無しさん
15/07/08 18:17:33.59 7bDc6WAX.net
(末尾呼び出し最適化されていない)関数呼び出しでスタックに積むものはCでもHaskellでも同じ。
戻り番地と、生きている変数と、レジスタに入りきらない引数。

901:デフォルトの名無しさん
15/07/08 18:27:23.28 Fj3AV/LF.net
マウンティングする奴は、マウンティングすることが目的だから、生産性は
低い。学者さんに多いタイプ。アカハラ怖い。

902:デフォルトの名無しさん
15/07/08 18:27:27.64 LC6Y88mm.net
>>887
????
Cもfastcallじゃない限り戻りアドレス積むよ

903:デフォルトの名無しさん
15/07/08 18:28:15.90 LC6Y88mm.net
しまった同じやつだった…

904:デフォルトの名無しさん
15/07/08 18:39:15.89 2M74HMLS.net
馬鹿とは議論するな。傍目にはどちらが馬鹿か判りにくい

905:デフォルトの名無しさん
15/07/08 18:50:26.80 7bDc6WAX.net
本当に混乱してる人もいるかもしれないし、説明のまとめだけ…
884 :デフォルトの名無しさん:2015/07/08(水) 18:02:40.05 ID:7bDc6WAX
まず、末尾再帰をループに変換する最適化は、CでもHaskellでも可能で、実際にGCCでもやってる。
それはさておき、Cではループを末尾再帰で書いたりしないから、そんな最適化はいらない、という意見もそれはそれでわかる。
末尾再帰使わないのに、末尾再帰最適化がないからダメ、なんて言ってる奴がいたらそいつがおかしいので具体的ソース希望。
886 :デフォルトの名無しさん:2015/07/08(水) 18:13:26.90 ID:7bDc6WAX
で、CでもHaskellでも、末尾呼び出し最適化されていない普通の関数呼び出しは、
戻り番地や、まだ使う変数をセーブしておくためにスタックを消費する。
(引数渡しにスタックを使うこともあるけど、そうでなくても)
(再帰でも、再帰でなくても)末尾呼び出しの場合、そのセーブが不要なので、
ただのジャンプ(と引数のセット)だけに最適化できる。
この最適化は関数型言語の処理系では普通は実装されている。
Cでも全くできないことはないと思うが、いろいろ面倒そうなので
やってるコンパイラは寡聞にして知らない。
889 :デフォルトの名無しさん:2015/07/08(水) 18:17:33.59 ID:7bDc6WAX
(末尾呼び出し最適化されていない)関数呼び出しでスタックに積むものはCでもHaskellでも同じ。
戻り番地と、生きている変数と、レジスタに入りきらない引数。 👀
Rock54: Caution(BBR-MD5:405b7f1af0f5a85b432d79fa769e9aeb)


906:デフォルトの名無しさん
15/07/08 19:00:46.58 Hcg+sLDh.net
ループを無くす理由の一つはnullを無くしたかったから
nullは不要 → 初期化と代入の区別が必要 → 面倒だから代入も不要 → ループも不要

907:デフォルトの名無しさん
15/07/08 19:03:01.21 7bDc6WAX.net
じゃあ、そもそもなんでループをわざわざ末尾再帰で書くの?という疑問は当然だけど、
ループで書くと破壊的代入が必要になるから、関数的に書くと自然に末尾再帰になる。
なので関数型プログラミングをするなら末尾再帰最適化は必須だし、
実際に(再帰以外の末尾呼び出しの最適化も)まともな処理系はみんな実装してる。
関数型言語では必須かつ簡単な最適化なので。

908:デフォルトの名無しさん
15/07/08 19:04:06.48 7bDc6WAX.net
>>895 すまん前後した

909:デフォルトの名無しさん
15/07/08 20:23:51.51 oVqSZ92L.net
>>886
vcは引数が全く同じ関数の末尾呼び出しをgotoにするよ。

910:デフォルトの名無しさん
15/07/08 20:46:18.84 7bDc6WAX.net
>>898 「引数が全く同じ」ってことは、末尾再帰だよね?
末尾再帰は>>884にあるとおりGCCも(引数が違っても)最適化してる。
>>886は再帰以外の末尾呼び出しの話だった。
一続きだったんだが、独立して読むと明示されてないね。
>>894でまとめて読んでくれ。すまん。

911:デフォルトの名無しさん
15/07/08 22:36:48.90 oVqSZ92L.net
>>899
いいや、tail callだよ。

912:デフォルトの名無しさん
15/07/08 22:53:06.86 TEEbED7E.net
VSにHaskell用プラグインを組み込むプロジェクト進んでるのかな?
マジで早く使いたいんだけど

913:デフォルトの名無しさん
15/07/08 23:02:56.60 zrPw7vNx.net
ここまでを簡単に解説すると、ハスケラはシッタカブラー。

914:デフォルトの名無しさん
15/07/08 23:32:53.31 oVqSZ92L.net
>>899
ほらよ。
int foo(char *, int);
int bar(char *a, int b)
{
return foo(a + 10, b - 10);
}
_bar PROC ; COMDAT
mov eax, DWORD PTR _b$[esp-4]
add eax, -10 ; fffffff6H
mov DWORD PTR _b$[esp-4], eax
add DWORD PTR _a$[esp-4], 10 ; 0000000aH
jmp _foo

915:899
15/07/09 05:48:11.05 KPxfvpRW.net
>>903 おお! 「引数が全く同じ」って、値じゃなくて、数や型が同じってことね。サンクス。
逆に、なんで引数の数や型が同じじゃないといけないの? スタックポインタの調整が面倒だから?

916:899
15/07/09 05:57:34.42 KPxfvpRW.net
いつのまにかGCCも末尾再帰じゃない末尾呼び出し最適化もやってた。引数の数や型が違っても。
Cでも需要があるのかな。
extern int foo(int);
int bar(char *a)
{
return foo(10);
}
bar:
.LFB0:
.cfi_startproc
movl $10, %edi
jmp foo
.cfi_endproc

917:899
15/07/09 06:13:19.89 KPxfvpRW.net
URLリンク(www.drdobbs.com)
にGCCがTCOする条件が解説されてた。Cだとややこしいけど需要はあるらしい。
連投&スレ違い失礼しますた。

918:デフォルトの名無しさん
15/07/09 06:35:27.16 OEKsJpEx.net
>>904
>「引数が全く同じ」って、値じゃなくて、数や型が同じってことね。サンクス。
再帰で値が同じならそれは無限再帰と呼ばれる。
>逆に、なんで引数の数や型が同じじゃないといけないの? スタックポインタの調整が面倒だから?
引数の個数はcalleeではわからないから、面倒ではなく、出来ない。

919:デフォルトの名無しさん
15/07/09 08:19:53.49 e+1UNYHr.net
>>907
>再帰で値が同じならそれは無限再帰と呼ばれる。
Cだと副作用でメモリの中身が変わってるかもしれない
>引数の個数はcalleeではわからないから、面倒ではなく、出来ない。
Cだと同じ関数の型の見え方がcallerとcalleeで違ったりするからね。
>>906みたく条件緩和できるがなかなかややこしい

920:デフォルトの名無しさん
15/07/09 09:12:59.14 LXpNU/xq.net
>>901
VSの色んな機能を使えるなら欲しいけど、vimやemacsのプラグインと同じ事しか出来ないならいらん

921:デフォルトの名無しさん
15/07/09 10:48:24.29 h1Dw9jX8.net
デバッガ観点で言うと末尾呼び出しの最適化されると
バックトレースが不正確になるのでやっかい
大規模な開発ではあえて無効にされることもあるよ

922:デフォルトの名無しさん
15/07/09 10:56:32.05 sAbBvj66.net
>>909
使えないの・・・?(´・ω・`)
詳細しらないけどきっと使えるんじゃね?
VSのデバッガ使いたい

923:デフォルトの名無しさん
15/07/10 07:10:09.65 0h1M+LeE.net
CSS使えない奴よりマシ

924:デフォルトの名無しさん
15/07/10 10:31:36.54 j3g7NrlE.net
(A -> R) -> R は継続モナドになるわけだが、
R -> A や A -> R もモナドにできるの?

925:デフォルトの名無しさん
15/07/10 11:04:46.48 XOUMSF+T.net
CSSいらない
>>913
m (r -> a)
m (a -> r)
モナドにしたったで

926:デフォルトの名無しさん
15/07/10 12:28:35.80 j3g7NrlE.net
>>914
returnと>>=はそれぞれどうなるの?

927:デフォルトの名無しさん
15/07/10 13:29:21.43 NSmmAGhS.net
>>915
つうか
(-> R A)と(-> A R)で普通に関数モナドな。
return = const
(>>=) f g = ¥x -> g ( f x ) x

928:デフォルトの名無しさん
15/07/10 13:50:04.51 j3g7NrlE.net
(-> R A)はそれで分かったが、
(-> A R)のreturnと>>=は?

929:デフォルトの名無しさん
15/07/10 16:23:11.40 NSmmAGhS.net
>>917
>(-> R A)はそれで分かったが、
>(-> A R)のreturnと>>=は?
あたま大丈夫?

930:デフォルトの名無しさん
15/07/10 18:30:43.38 j3g7NrlE.net
は?

931:デフォルトの名無しさん
15/07/10 19:04:13.42 l6c5ofse.net
たしかにあたま大丈夫じゃないリスクはゼロではないが、自動車より安全だ
そして、自動車より安全と発言した人間が狂っていると断言できる者はあまり多くない

932:デフォルトの名無しさん
15/07/10 23:42:39.10 ucCSbhAH.net
>> 919
Rが具体的な型で、Aがなんでもいい型、って言いたいわけだね。
(A -> R) はモナドにならないよ。というか、Functor(共変関手)にならない。
代わりにContravariant(反変関手)になる。
newtype Op a b = Op { getOp :: b -> a }
instance Contravariant (Op a) where
contramap f g = Op (getOp g . f)
(以上contravariantパッケージより)

共変関手にならない理由は、このサイトがわかりやすい。
URLリンク(kinokkory.hatenablog.com)


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch