[過去ログ]
次世代言語12 Go Rust Swift Kotlin TypeScript (1002レス)
次世代言語12 Go Rust Swift Kotlin TypeScript http://mevius.5ch.net/test/read.cgi/tech/1530664695/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
518: デフォルトの名無しさん [] 2018/07/31(火) 15:00:19.27 ID:zoworXJJ >>478 あのぅメソッドチェーンとは異なり、内包表記というのは 決して万能な道具ではないんですけど、ご存知ですか? 内包表記というのは、高階関数 map/filter とジェネレータという 三つの要素を簡潔に表現できる構文糖でしかありませんから、 内包表記では表現できない課題も数多く存在します ですからたとえば Haskell では内包表記を提供する一方で、 ポイントフリーといふ関数を繋ぐ流れるようなスタイルでも書けます つまり「メソッドチェーン vs. 内包表記」という対決の図式は成り立ちません これでもまだ「リスト内包がわからんってわめき散らすの無知晒してるだけ」と 騒ぎたいなら、以下のお題(>>430-431)を内包表記だけで書いてみてください '-'.join(map(lambda x: str(x), reversed(sorted(a)))) >>478氏が無知でなければ、内包表記でサラッとエレガントなコードを書けますよね? ちなみに以下のような三重にカッコが入れ子になった醜いコードは勘弁してくださいね '-'.join(str(x) for x in reveresed(sorted(a))) http://mevius.5ch.net/test/read.cgi/tech/1530664695/518
519: デフォルトの名無しさん [] 2018/07/31(火) 15:33:57.86 ID:zoworXJJ >>517 >n個の集合の直積を考える場合普通n=1は除外しない ええ、それが Python 村の中では「普通」で常識なんですよね でも Python 村から一歩外に出れば: n個の集合の直積を考える、ここで n>=2 が「普通」なんですけど、ご存知でしたか? たとえば手元の教科書(*1)だと、直積は以下のように定義されています ・2つの集合の直積 A × B = { <x, y> | x <- A, y <- B } ・3つの集合の直積 A × B × C = { <x, y, z> | x <- A, y <- B, z <- C } ・4つの集合の直積も同様に定義される この本では n=1 は定義されていないし、個人としても定義のしようがないと考えます で、ML/Haskell/Erlang/Prolog といったタプルというデータ構造が存在する言語でも、 「普通」n=1の直積を除外しており、これが世間の常識です ちなみに「Python村の常識、世間の非常識」といふ格言、聞いたことありませぬか? ところで、もちろん内包表記はご存知ですよね? 知らないと>>478氏に「無知晒してる」と嗤われちゃいますよ *1:論理と計算のしくみ https://www.amazon.co.jp/dp/4000061917/ http://mevius.5ch.net/test/read.cgi/tech/1530664695/519
520: デフォルトの名無しさん [sage] 2018/07/31(火) 16:01:29.91 ID:6M1+k6px n=1もあるしn=0もある n=0は直積の単位元いわゆるunit 直和の単位元はbottom http://mevius.5ch.net/test/read.cgi/tech/1530664695/520
521: デフォルトの名無しさん [] 2018/07/31(火) 16:12:57.41 ID:zoworXJJ >>520 >n=1もあるしn=0もある >n=0は直積の単位元いわゆるunit たしかに Python 村の中では、n=0 も除外しないのが「普通」ですね で、静的型付け言語の ML/Haskell では単位型(unit)として定義され タプル型とは明確に区別されていますし、動的型付け言語では nil という特別なアトムで表現することが多く、これが世間の常識です ちなみに「Python村の常識、世間の非常識」といふ格言、聞いたことありませぬか? ところで、もちろん内包表記はご存知ですよね? 知らないと>>478氏に「無知晒してる」と嗤われちゃいますよ http://mevius.5ch.net/test/read.cgi/tech/1530664695/521
522: デフォルトの名無しさん [sage] 2018/07/31(火) 17:08:51.40 ID:LX5aJa12 >>516 なんだか随分と力んでいるみたいだけれど > それにもかかわらず Python では、単なる不変(immutable)な配列に対して > 公式文書でこともあろうか「タプル」と命名し、驚くなかれ「1要素のタプル」 > といふ数学の概念を超越したリテラル構文を定義しちゃいました > 世界的に普及している/していた言語は数多くありますが、こんな命名や > リテラル定義が存在するのは、後にも先にも Python だけ、唯一無二の存在です いや、そういうことを言い出せば同じ引数の値で呼び出しても返す値が同じになるとは限らないCなどの「関数」“function”は数学における関数の概念とは全く違う破廉恥極まりない命名だとなるよ そもそも手続き型プログラミング言語やオブジェクト指向プログラミング言語での「変数」“variable”と呼ばれているものもも数学の変数とは全く異なる (例えば、それらの言語で書かれたプログラムの検証を考えるとその問題があからさまになる) つまりプログラミング言語での用語は数学の用語を借りて使ってはいるが数学でのその用語の表していた概念を尊重しているとは限らないということだ そういう例、つまり数学用語を数学での概念を尊重しない形でプログラミング言語の世界で借用してしまっている例は探せばいくらでもあるだろう http://mevius.5ch.net/test/read.cgi/tech/1530664695/522
523: デフォルトの名無しさん [sage] 2018/07/31(火) 17:40:46.67 ID:vAluDZRs そもそも = が代入って時点で数学と違うんだから いちいち「厳密な定義がー」いう方がどうかしてる。 http://mevius.5ch.net/test/read.cgi/tech/1530664695/523
524: デフォルトの名無しさん [] 2018/07/31(火) 17:55:08.00 ID:zfxDeDFf 普通にWikipediaでタプルをしらべたら一要素のタプルの事をシングルというと 書いてあるのだがwww http://mevius.5ch.net/test/read.cgi/tech/1530664695/524
525: デフォルトの名無しさん [] 2018/07/31(火) 18:08:24.59 ID:zoworXJJ >>522 数学の定義や数式を計算機上で実行するには、 必然的に「解釈」という(あるいは「評価」とも呼ばれる)プロセスを伴いますから、 数学の概念とプログラミング言語との間に乖離(かいり)が存在するのは一般論ですし、 その為に計算機工学という分野で研究成果が積み重ねられてきました もちろんこうした乖離は一般論ですから、例を探せばいくらでも挙げられるでしょう たとえば「n個の直積を考える」場合に数学では n=1 や n=0 を除外しないモデルを 構築することは可能ですが(>>517,521)、計算機工学の研究成果を元に設計された 言語だと「n個の集合の直積を考える、ここで n>=2」が暗黙のうちに認知されています (なぜなら n=1 または n=2 の直積は、一般的には形式的に定義できない為) ところが、こうした計算機工学の成果である n>=2 を無視し、 そんなのどうでもいいとばかりに「単なる不変な配列をタプルと命名する(>>516)」といふ 深淵の淵へ自ら飛び込んだ稀有な例が Python といふ次世代言語なんですよ もしも「他のあらゆる言語では計算機工学の常識に沿って設計しているのに、 ある特定の言語ではそれを無視している」という具体例があれば、ご教示願います たとえば「Python におけるタプルの命名」は、他の言語には見られない唯一無二の例です http://mevius.5ch.net/test/read.cgi/tech/1530664695/525
526: デフォルトの名無しさん [] 2018/07/31(火) 18:21:46.76 ID:zfxDeDFf A = { x | x <- A} A × B = { <x, y> | x <- A, y <- B } 普通に定義できるがwww http://mevius.5ch.net/test/read.cgi/tech/1530664695/526
527: デフォルトの名無しさん [] 2018/07/31(火) 18:36:17.24 ID:zoworXJJ >>478 >それはそれとしてPythonはもっと関数を横に繋げられるようにしてくれ >Elixirのパイプ演算子みたいな感じでさあ いや、新たにパイプ演算子みたいな構文を追加しなくても、 オブジェクト指向言語の Python であれば、メソッドチェーンで実現できるよ だって、Python を除く今時のオブジェクト指向言語では実現できていますから その具体例が >>430 のリンク先のブログ主様が書いた簡潔なライブラリです 問題は、「なぜこれをやろうとしないのか?」という点です もちろんライブラリの後方互換性は失われますが、 python2 から python3 で致命的な「後方互換性の断絶」を断行したのが Python ですから、一貫性のあるAPIを提供するライブラリへの刷新もできたはず さらに根本原因にさかのぼれば、「なぜ最初から一貫性のあるAPIを設計しなかったのか」 といふ疑念に突き当たります だって、Python を除く今時のオブジェクト指向言語では設計できていますから 最後に背景原因を考察すると、Python 作者のGuido氏が: API の設計において一貫性などはクソ と考えていたのか、それとも: オブジェクト指向が流行っていたから行き当たりばったりに設計した、 今は後悔している と考えているのか興味深い http://mevius.5ch.net/test/read.cgi/tech/1530664695/527
528: デフォルトの名無しさん [] 2018/07/31(火) 18:45:34.71 ID:zoworXJJ >>526 >A = { x | x <- A} えぇとぉ、{ x | x <- A} というのは単に集合 A を内包的に定義してるだけですから、 それは「1個の集合Aから構成される直積」ではなく単に「単純集合A」を定義してるだけです あぁそうか、フェイトニスタには内包表記うんぬん以前に、数学の教養が欠けているのですね ついうっかりしておりまして、大変失礼をば致しますた http://mevius.5ch.net/test/read.cgi/tech/1530664695/528
529: デフォルトの名無しさん [] 2018/07/31(火) 19:00:43.13 ID:zoworXJJ うっかりミスを訂正: >>525 X:>(なぜなら n=1 または n=2 の直積は、一般的には形式的に定義できない為) O:>(なぜなら n=1 または n=0 の直積は、一般的には形式的に定義できない為) http://mevius.5ch.net/test/read.cgi/tech/1530664695/529
530: デフォルトの名無しさん [] 2018/07/31(火) 19:04:21.79 ID:zfxDeDFf 定義するのに集合と同じ定義では同じでは駄目というルールはないから間違っては無いwww ちなみにn=0の直積は1元集合として定義できるとWikipediaにかいてあるwww http://mevius.5ch.net/test/read.cgi/tech/1530664695/530
531: デフォルトの名無しさん [sage] 2018/07/31(火) 19:12:42.47 ID:x816LWzK ウィキペに書いてあるとか言っちゃう人って・・・ http://mevius.5ch.net/test/read.cgi/tech/1530664695/531
532: デフォルトの名無しさん [] 2018/07/31(火) 19:36:15.75 ID:zfxDeDFf 正式な定義だと、直積の要素はペアの中にペアがある構造じゃないと駄目www A × B × C = { <x, y, z> | x <- A, y <- B, z <- C } ↑の定義があってるのは日本のWikipediaだっけでしたwwww これを使うにはn-fold Cartesian productという直積を拡張した奴じゃないとだめでした残念www とくにn=1の時はそのままA=Aとちゃんとした本に書いてあるwwww http://mevius.5ch.net/test/read.cgi/tech/1530664695/532
533: デフォルトの名無しさん [sage] 2018/07/31(火) 19:38:51.12 ID:xC1/ia91 今までの流れをまとめるとpythonはクソ。 TypeScriptが最強。という理解でよいでふか? http://mevius.5ch.net/test/read.cgi/tech/1530664695/533
534: デフォルトの名無しさん [] 2018/07/31(火) 20:41:56.45 ID:CfkG900T rustが最強 が正しい http://mevius.5ch.net/test/read.cgi/tech/1530664695/534
535: デフォルトの名無しさん [sage] 2018/07/31(火) 21:51:57.40 ID:vpErkqT1 メソッドチェーンでもリスト内包でも異常なまでのテンポラリ変数嫌悪を感じるのだが、 無理にそんな書き方するくらいならテンポラリ変数使えや。 http://mevius.5ch.net/test/read.cgi/tech/1530664695/535
536: デフォルトの名無しさん [] 2018/07/31(火) 22:05:54.62 ID:CfkG900T メソッドチェーンは無理なく書けるでしょ 変数はバグの餌だから忌諱するのは当然 http://mevius.5ch.net/test/read.cgi/tech/1530664695/536
537: デフォルトの名無しさん [sage] 2018/07/31(火) 22:09:04.65 ID:4i5flEMB 変数があって嬉しいのはデバッガでステップイン実行するときだけだな そろそろステップの概念を卒業した新発想のデバッガが必要な時期にきてると思う http://mevius.5ch.net/test/read.cgi/tech/1530664695/537
538: デフォルトの名無しさん [sage] 2018/07/31(火) 22:10:09.78 ID:/w6/tE8P 一時的な内部処理でまでステートを毛嫌いする純粋病の関数型信者と似ている http://mevius.5ch.net/test/read.cgi/tech/1530664695/538
539: デフォルトの名無しさん [sage] 2018/07/31(火) 22:14:45.36 ID:hpcufxDD お前らみたいなドカタなら兎も角、数学者がn=0やn=1に自然に拡張できる定義をn>=2に限定するわけないじゃん ドカタここに極まれりだな http://mevius.5ch.net/test/read.cgi/tech/1530664695/539
540: デフォルトの名無しさん [sage] 2018/07/31(火) 22:17:04.70 ID:10MH4XIN メソッドチェーンってワンライナーと同類だろ http://mevius.5ch.net/test/read.cgi/tech/1530664695/540
541: デフォルトの名無しさん [] 2018/07/31(火) 22:23:11.93 ID:CfkG900T プログラマならバグの素を毛嫌いするのは当たり前じゃん あくまでリーダビリティを損ねない範疇でだけども http://mevius.5ch.net/test/read.cgi/tech/1530664695/541
542: デフォルトの名無しさん [sage] 2018/07/31(火) 22:24:35.12 ID:omk/SwPI >>540 途中でクラスが変わるようなメソッド呼び出しを10個も20個もチェインするヤツは知らんが コレクションに対する操作を数個チェインするぐらいは別に普通じゃね http://mevius.5ch.net/test/read.cgi/tech/1530664695/542
543: デフォルトの名無しさん [sage] 2018/07/31(火) 22:27:24.42 ID:10MH4XIN >>539 ちゃうやろおっさん 型理論的にはn>=2に拡張するために持ち出すのがpair なのでn=0,1にpairを持ち出す必要がない 別の言い方をすると型理論的にはAと<A>は同じ そこを区別するのがアドホックにpairを導入した言語ということ 組み込みの土方より http://mevius.5ch.net/test/read.cgi/tech/1530664695/543
544: デフォルトの名無しさん [sage] 2018/07/31(火) 22:35:12.06 ID:omk/SwPI >>541 たとえばコレクションのフィルター関数を実装するようなときに 一時的にミュータブルなコレクション作ってループ回して最後にイミュータブルにして返せばいいようなものを 最初の要素が条件満たさなかったらそれを落とした新しい不変コレクション作って返す関数の再帰で書くようなゴミが純粋病 http://mevius.5ch.net/test/read.cgi/tech/1530664695/544
545: デフォルトの名無しさん [sage] 2018/07/31(火) 22:37:48.27 ID:vpErkqT1 >>541 バグの元の一番大きなものは可読性のなさだぞ。 測りにくいものを一切無視するのがこの手の輩のダメなとこだな。 http://mevius.5ch.net/test/read.cgi/tech/1530664695/545
546: デフォルトの名無しさん [] 2018/07/31(火) 22:39:01.83 ID:CfkG900T >>544 なにそれこわい それってなんというテクニックなの? http://mevius.5ch.net/test/read.cgi/tech/1530664695/546
547: デフォルトの名無しさん [] 2018/07/31(火) 22:39:55.17 ID:CfkG900T >>545 だから可読性を損ねてはならないって書いてるじゃん 俺のレスは可読性低かったか? http://mevius.5ch.net/test/read.cgi/tech/1530664695/547
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 455 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.012s