シェルスクリプト総合 その34

■ このスレッドは過去ログ倉庫に格納されています
2020/08/21(金) 15:17:55.64ID:mArnj/tT
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。

シェルスクリプト総合 その33
https://mevius.5ch.net/test/read.cgi/tech/1584893550/
2020/09/20(日) 12:53:30.22ID:55J7R452
>>355
「〇〇じゃないかもしれない」は反論じゃないんやで
「○○じゃないと思ってるが反論できない(じゃあ正解なのでは?)」という意味なんやでw
2020/09/20(日) 13:59:08.57ID:5WkIzV16
>シェルスクリプトに適しているのは〜 フィルタ的な働きが求められる種類の仕事にも適しています
ってあるじゃん、そもそもそういうものでしかなく(それを実現してるのはパイプ=シンプルなプロセス間通信というUNIXらしいシことで実現)、関数型言語として作られてもいないし発展も変化もしてない
シェルスクリプトに適しているのはフィルタ以外のは単なるジョブらしいぞ

似てる部分があるだけで関数型とするのは無理がありすぎ
単にフィルタの段々ができるってだけでいいのに、なんで関数型と言いたいのか
今までのコメからはなんかそれで一人悦に入りたいらしいけど目的がわからんな
2020/09/20(日) 14:30:46.33ID:V1UjDwA2
>>357
>なんで関数型と言いたいの
これは自分が使ってる道具が古臭くないぞ、最近流行してる機能を昔から実現してるんだぞと主張することで
自分自身が古臭い老害じゃないぞ、新しい技術だって知ってるんだぞ、優秀なんだぞと暗に主張したいから

老害多めのレガシーな言語スレでよく見られる現象
2020/09/20(日) 14:36:18.77ID:55J7R452
>>357
> 関数型言語として作られてもいないし

まーた「関数型言語」って妄想してる
だーれもシェルスクリプトが「関数型言語」なんていってない
「関数型スタイル」って言ってんの

何回言えばお前が戦ってる相手が
お前の妄想の中の架空の人物だって理解すんの?
2020/09/20(日) 14:36:32.46ID:5WkIzV16
シングルタスク、プログラムを一つ起動して終わって次なしかできない環境では、
command1 > foo.txt
command2 < foo.txt > bar.txt
command3 < bar.txt > foo.txt
command4 < foo.txt
とか、一時ファイルに逐次書いて読んでだろうが。もちろん、面倒くさがりが多いこの業界ではこんなのやってられない繋げてしまえと思うのはいたって普通

関数型なんて関係ない、ただそれだけだろな
前プロセスの標準出力を次(フィルタ)プロセスの標準入力に繋げるというシンプルな仕組みだからスクリプト内でも他の形態でも使えるが、ベースは同じ

確かMS-DOSはパイプもどきを実現してるが(一時ファイルに書き出してって上記のを逐一ってのを実際はやって実現してたはず)、
表記的表記的には同じようにステートレスとやらになるが MS-DOS batch fileも関数型の親戚か?


>>358
そうはっきり言わなくてもw
そんなの透けて見えてるけど、自問させてみようかなと
逆に全然優秀に見えないのはなんでだろうなあ
2020/09/20(日) 14:37:24.66ID:55J7R452
>>358
え?関数型って新しいんでしたっけ?w
シェルスクリプトと同じぐらい古いものだと思ってるんですがー?
2020/09/20(日) 14:38:40.31ID:5WkIzV16
>>359
関数型スタイルでもない、「関数型」なんて意識してないのが明らか
勝手に間違った造語作って偉そうにされても困る
2020/09/20(日) 14:41:37.03ID:5WkIzV16
>>361
古くからあるらしいが、そんなの世間に出てもてはやされたのは最近って話だろうに
それはあんなサイトを貼ってるので証明してる

優秀なんだぞと暗に主張したいんだったら、少しは他社の目ももとうな
2020/09/20(日) 14:41:52.86ID:55J7R452
ふむ。あってるよな

https://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0%E5%9E%8B%E8%A8%80%E8%AA%9E
最初の関数型言語といわれてるLISPは1958年、Haskellは1990年

https://en.wikipedia.org/wiki/Bourne_shell
Bourne shellは1976年、POSIX shellはksh88として1988年

関数型が新しい技術???
2020/09/20(日) 14:42:43.83ID:55J7R452
>>363
お前は世間のブームが基準なのかよw
2020/09/20(日) 14:47:03.43ID:5WkIzV16
自分であんなサイトを自慢げに貼って何を言っているのかな?
そんな古く周知されてるなら、あんなサイトを持ち出さなくてもいいし、一人延々と自説を唱えることはないわな

表記的表記的には同じようにステートレスとやらになるが MS-DOS batch fileも関数型の親戚か?
で結論は出ているから、もうおしまい
2020/09/20(日) 14:47:47.68ID:55J7R452
自分であんなサイトを自慢げってなんのこと?w
ググって出てきたものを貼ってるだけなんだけど

記事の内容じゃなくて、サイトを批判してるようじゃぁ
説得力ゼロですなぁ
2020/09/20(日) 14:51:24.36ID:55J7R452
>>366
> MS-DOS batch fileも関数型の親戚か?
ぜんぜん違う

コマンドを実行してみりゃわかることだがWindowsのコマンドは対話型
実行したら「○○を処理しました。」とか標準出力に表示されたりして
ストリーミング処理できるように設計されていない

もちろん並列処理が行われないなどという点もあるがそれ以前の問題
お前はパイプラインの有無で判断しているからバッチファイルも同じだと
考えているようだが、パイプラインは関係ないと最初から言っている
2020/09/20(日) 14:56:03.76ID:5WkIzV16
ググる必要もないだろうにって話だが?>>361の反論からは
あんなサイトっていうのは別に書いたのがあなたというわけではないよ

というか>>361以下の反論が反論になってないな、散々反論反論言っていたんだから、自分でちゃんとした反論をしなさいよ

>>368
全然読めてないな、あのサイトも>>360
あなたがシェルスクリプトを関数型と根拠にしたのはパイプで繋げるだからな、あのサイトの抽出したのもそこだろう、MS-DOSでもそこは表記的表面的には同じ
2020/09/20(日) 14:59:06.57ID:55J7R452
> あなたがシェルスクリプトを関数型と根拠にしたのはパイプで繋げるだからな
別の人と勘違いしてるねw

パイプラインとか言い出したのはこいつ(>>285
> シェルスクリプトは、フィルタ型とかパイプライン型とか呼べばいいのでは。
2020/09/20(日) 15:00:06.11ID:55J7R452
重要なのはパイプラインではなく、ストリーミングであるという所だ。
つまり1行1データになってないといけない
MS-DOSはそうなってないので全く的外れ
2020/09/20(日) 15:10:50.29ID:5WkIzV16
>>354 って自分で書いたくせに何をおっしゃってるのだが
まさかググっただけ中はよく読んでない、都合の良さげの文があったのでというのか?
ちゃんと自分で改めてあのサイトの内容を見てから言いなさいな、まさしくパイプで繋げることしか書いてないから=それが関数型に似てるだけだから

なんだか知らんが俺が決める仕様なのか、関数型とやらは。誰も納得しないだろうな、その俺が決める仕様なら
2020/09/20(日) 15:29:06.24ID:55J7R452
> >>354 って自分で書いたくせに何をおっしゃってるのだが

354にはパイプラインなんて出てきてませんねぇw

> ところで、「流入してくるデータを加工して返却する」「ステートレスな」処理が得意で、
> 「内部で複雑な状態を持つ必要のある」「ステートフルな」処理が苦手だというのは、
> 関数型言語にも見られる特徴です。14
2020/09/20(日) 15:30:01.00ID:55J7R452
なんつーか、設計方針を理解してないみたいだな
「パイプ」があれば、設計が同じだと思ってしまう
その程度の理解力なんでしょうね
2020/09/20(日) 15:38:04.31ID:5WkIzV16
自分では「パイプ」とは書いてない、抽出した先で抽出した文がパイプだけのことをを指してあっても、自分は書いてないからかあ
どういう思考してるのか理解できないな

>>374
ますます自分の都合の良い捻じ曲げ方してますねえ
自分で抽出した先でそのことだけを言及して、それを自分で開陳してるなら、抽出した先でパイプで繋げることしかなら同じだろうという、いたって単純な結論になるのは当たり前

しかも「これが結論」って自分で書いてらっしゃるんですけど
ちなみに、よく読めばわかるだろうと思うのだが、あれを書いた人もそんな設計方針が必要なほどのことはシェルスクリプトで書かないよ、そう書いてあるでしょう
2020/09/20(日) 16:04:51.92ID:8zr1eESi
ストリーミンガーには、まず「関数型スタイル」というものをあきらかにしてほしい。今さらだけど。

ところで、あのWebページのひと、なんかかわいそう。。。
シェルスクリプトには関数型的な特徴がある、ふつうのスクリプト言語とはちょっと違うような、と言っただけなのに、針小棒大にネタにされて。
2020/09/20(日) 17:23:12.71ID:55J7R452
> 抽出した先で抽出した文がパイプだけのことをを指してあっても
ストリーミングと書いてますが?
2020/09/20(日) 17:24:34.33ID:55J7R452
シェルスクリプトには関数型的な特徴がある、
シェルスクリプトには関数型スタイルである、

同じことを言ってますねw
2020/09/20(日) 18:33:36.30ID:8zr1eESi
>>378
なるほど、話が通じない理由がわかった。
それが同じことだと本当に思っているなら、コンピュータのこと以前に、まず国語を勉強する必要がある。

たまたま似た特徴があるとしても、全体がかなり違っていれば、ふつうは同じものと見なさない。
「スタイル」という言葉は、一部に似た特徴がある程度のものを統合しない。
2020/09/20(日) 18:47:56.61ID:55J7R452
> 「スタイル」という言葉は、一部に似た特徴がある程度のものを統合しない。

それはどこの誰の定義ですか?


https://docs.python.org/ja/3/howto/functional.html
この文書では、関数型スタイルでプログラムを実装するのにピッタリな Python の機能を見てまわることにしましょう。
関数型スタイルにおいては、内部状態を変えてしまったり、返り値に現れない変更をしたりといった副作用のある関数はやめるように言われています。
関数型スタイルで書いた Python プログラムはふつう、I/O や代入を完全になくすといった極端なところまでは行かずに、
関数型っぽく見えるインタフェースを提供しつつも内部では非関数型の機能を使います。
まずは関数型スタイルのプログラムを書く際の基礎となる重要な Python 機能から見ていきましょう: イテレータです。
これらの章内の多くのデザインアプローチは関数スタイルな Python コードにも適用できます。
2020/09/20(日) 19:17:05.28ID:77Xtdks6
こいつって前からいるけど致命的に日本語を読めないな
2020/09/20(日) 19:28:01.14ID:55J7R452
とまあ、こういうふうに悪口しか言えないわけでw
2020/09/20(日) 19:36:37.16ID:77Xtdks6
今までので何も読めてないのは確かだな。誰もお前と話が通じてないからな
>>380も読めてないお前にしか見えない何かがお前にだけ見えるだけ
2020/09/20(日) 19:41:15.67ID:8zr1eESi
>>380
その引用文はどこもおかしくない。
だが、おまえの話はおかしい。
全然関係ない文をもってくるな。

あのね、たとえ話をするね。

カタコトの日本語をしゃべる人がいたとしても、その人が日本人かどうかはわからないのね。
まったく別のところから、きれいな日本語をしゃべる人を連れてきたとしても、カタコトの日本語をしゃべる人とはあくまで他人なので、なにかがわかるわけではないのね。
そして、きれいな日本語をしゃべる人も、結局、日本人かどうかはわからないのね。

要するに、しっかり理屈でしゃべれ!
2020/09/20(日) 20:50:37.14ID:55J7R452
おや?またシェルスクリプトとは関係ない話で終りですか?(笑)
内容に対してのコメントはないのに、レスだけはしたいんですね。
2020/09/20(日) 21:11:26.77ID:i6/MN77q
コミュニケーションに問題があるということを言うことは
コミュニケーションの場で言うことには何も問題ではない
内容以前の話。内容が無茶振りな理屈でこいつの頭の中でしか通らないからな
そしてすぐにくだらない言い逃れに走るしなw
2020/09/20(日) 21:34:50.84ID:qcN7Nyvi
ここが匿名の場なので仕方ないんだけど、シェルスクリプトのファイル作成はモナドって言う人やコマンドは高階関数って言う人が、シェルスクリプトは関数型ないし関数型スタイルだと言いがち(だし他には散々レスがなされているのに、そこの指摘に対して何の反論もなく、意図的にスルーしていると言われても仕方がないような立ち回りをしている)ので信用が得られていないというのはあるかもね

認めようとさせるなら、例えば「awkやsedの文字列でコマンドを渡すのが無名リテラルとしてのラムダ式に相当してる」とか、「while readによる標準入力受け取りイディオムによってスクリプトがfunctor/mappableになるのだ」とか言いくるめないと
2020/09/20(日) 21:38:30.85ID:8zr1eESi
>>385
内容にコメントしたら、話が通じないからね。w
シェルスクリプトが「関数型スタイル」だとか、意味不明な発言をしているうちはムリムリ。
2020/09/20(日) 21:48:53.60ID:55J7R452
だから意味不明な理由を言えばいいだろw
言い訳ばっかりだな
2020/09/20(日) 22:04:58.48ID:GOdQy7G8
そろそろ次スレ立てましょうか?
2020/09/20(日) 22:41:23.61ID:8zr1eESi
>>389
>>376
無限ループかな?w

ま、まともな会話はもう期待してないから、どうでもええで。
人語を理解しないのだからしゃあない。
2020/09/20(日) 22:50:20.84ID:55J7R452
はいまたシェルスクリプトと関係ないレスをしました
2020/09/20(日) 23:41:44.50ID:8zr1eESi
>>392
シェルスクリプトに関係ない話を始めたのはそっちやで。

シェルスクリプトはもちろん、関数型言語にも関係のない、独自スタイルの話をえんえんぶちあげられたんやから。
「関数型スタイル」て。w

人語がしゃべれないのに長々と相手してもらったことを感謝するべき。


そして、>>304はこのことを深く記憶して、これからは相手をよく見て話してほしい。
頼むで!
2020/09/21(月) 08:20:34.71ID:0WrTUa3Q
もう少し推敲しなよお客さん
2020/09/21(月) 11:57:46.54ID:249hXDDO
>>394
シェルスクリプトと関係ないレス。w
2020/09/21(月) 19:00:59.34ID:OB+sYWJW
あの〜。なんでみなさん「個人の感性」を根拠にできるんですかね。
この世界では学者はそんなに重要じゃないのかな。
そんなことないと思うけど……。
2020/09/21(月) 19:36:50.17ID:dSuXtJgv
個人の感性以上でも以下でもない話題だからじゃないですかね
2020/09/21(月) 19:55:48.18ID:GxzcHgtD
個人の感性ですかねぇ?

シェルスクリプトはreturnで数字以外返せない。返すには標準出力を使う。
つまり a=$(hoge) とか hoge | other_command とかするしか無い。

そうすると前者はサブシェルになるから変数、つまり状態を書き換えられない。
正確には書き換えられるけど破棄される。後者もサブシェルだから同様。

前者はストリーミング処理ではないが、大量のデータを扱う場合は遅くなるので推奨されない
しかしこれを改善するつもりはないだろう。なぜなら大量のデータを扱う場合は後者の書き方を使えばいいからだ。
後者の書き方は関数型が得意とするストリーミング処理。

シェルスクリプトで遅くならない書き方をすると自然とストリーミング処理になり
変数が書き換わることもない。そしてパイプラインは並列処理が行われる。
ここも並列処理が得意な関数型の特徴と似ている。

これらの事実はシェルスクリプトが関数型として設計されているとみなすには十分な理由だろう。
2020/09/21(月) 20:28:55.67ID:249hXDDO
またアホが出るのか。。。
たまたま見えた特徴だけから同一視しちゃうとか。w

>>396は、ちゃんと後片付けしていけよ。
頼むで!
2020/09/21(月) 20:43:06.20ID:GxzcHgtD
な?ちゃんと書いた所でまともな反論が返ってこないんだもんな。

自分で「シェルスクリプトと関係ないレス。w」と言っておきながら
それをすぐ自分でやっちゃうわけだ。
そういうことを自分がしているという自覚がない証拠。
2020/09/21(月) 20:54:42.96ID:249hXDDO
>>400
アホな認識でアホなことを書いてるからな。
事実と関係のない妄想はいらん。
2020/09/21(月) 20:59:40.48ID:GxzcHgtD
アホなことであるという根拠がないから
>>401がアホだと思ってるだけ←イマココ。そしてココで終り
2020/09/21(月) 21:26:24.47ID:dSuXtJgv
このページで[機能の/機能する]の意でない(つまり関数型を示唆する意味での)functionalを探してみ
余裕があればshellで扱われている文字通りのfunctionとC言語のfunctionと[機能/働き]のfunctionを除く(つまり関数型言語で扱われる関数の意味を示す)functionも探してみるといい
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html

まぁそもそもBourne Shellの作者がC言語の文法をALGOL68に寄せるためのマクロを書くしBourne Shellソースがそれで書かれてるくらいALGOL人間で、シェルの文法もそっちに寄ってる訳だ
cshのようにUNIX本体に使われてるC言語の影響を受けるとか、動的型の点でLispの影響を受けるならまだしも、MLの影響を受ける余地があるかなぁホントかなぁという気持ちになるよ
2020/09/21(月) 21:41:21.38ID:psQWnHmR
いや、お前こそ探してみ?

探してみといって、何になるのか?
2020/09/21(月) 21:41:57.64ID:dSuXtJgv
俺が読んだ限りではなかったけど君は信用しないでしょ?
2020/09/21(月) 22:01:29.40ID:249hXDDO
>>402
事実であることを示すほうが先やで。
でなければ妄想に基づく妄想。

自分の考えはみんなの考え。
相手の考えは相手だけの考え。
というのは、アホの理屈。

といっても、わからんのやろが。
2020/09/22(火) 03:08:07.81ID:bItwwpmo
事実は>>398に書いてある。

あとは、>>398が言ってることは正しい、かつ関数型スタイルの設計だねというか
>>398が言ってることは正しいが、関数型スタイルとは認めない。なぜなら〜という感じで
お前が答えるかだろ
2020/09/22(火) 05:40:42.36ID:jDsJ+rCA
関数型スタイルwに拘るのがさっぱりわからん
単に名称に拘ってるのか?そうでないなら、今までと違う関数型スタイルやらをコードで書いてみせれば?もちろん今までと違って読みやすいとかで
2020/09/22(火) 11:58:28.88ID:cIkntQZr
>>407
>>398が、シェルスクリプトを実行したときの特徴の一部を指摘しているのはそのとおり。事実として認められる。
今までも、そこを否定したコメはないはず。

しかし、次の文は根拠がない。論理の飛躍というか、「個人の感性」というよりも、個人の妄想。

> これらの事実はシェルスクリプトが関数型として設計されているとみなすには十分な理由だろう。

たまたま一致する特徴だけで、そうなるように「設計」されたとは言えない。
# >>403の指摘も、そこに対する疑問であろう。
副作用がもれないこと、並列動作が期待できることは、あくまで特徴。

ふつうに考えれば、別プロセスで実行する都合、そうなることは必然の結果でしかない。
因果関係を逆転させるには、別の充分な根拠が必要。

また、一般的に「スタイル」は、主でない特徴がたまたま似ているだけのもののグループを統合する言葉として使われない。
2020/09/22(火) 13:00:12.76ID:qKy/ayU4
たぶん読めない伝わらないだろうなせっかく長文書いたのにw
2020/09/22(火) 13:18:38.89ID:UY6+hZuP
>>409
> また、一般的に「スタイル」は、主でない特徴がたまたま似ているだけのもののグループを統合する言葉として使われない。

Pythonが関数型スタイルと書かれていることとの違いは?
なぜPythonはOKでシェルスクリプトは駄目なのか

https://docs.python.org/ja/3/howto/functional.html
> この文書では、関数型スタイルでプログラムを実装するのにピッタリな Python の機能を見てまわることにしましょう。
2020/09/22(火) 14:22:37.92ID:cIkntQZr
>>411
ぜんぜんちがうことだから。
関係のないことを持ち出しても、しょせん関係のないこと。

また、「スタイル」以前に、「設計」の話は?
2020/09/22(火) 14:23:19.49ID:cIkntQZr
>>410
こっちも意地になってるからね。
しかたないね。
2020/09/22(火) 14:45:04.78ID:KrrXHwz7
>>411
Pythonは根本的に関数がOOP的オブジェクトで自然と第一級オブジェクトなので高階関数が扱えるし、対象ページにある通りラムダ式も扱える(もっというとcallableオブジェクトもその類だが)
カリー化こそないけど部分適用も扱えるし、OOP的イテレータパターンを利用して複数の値に対する個別の適用をmap,reduce,filter,zip,product関数のように一般化した高階関数で扱える

定数名前束縛がサポートされてないのは個人的には理解に苦しむんだけどw閑話休題、集合・辞書・リスト内包表記は数学的内包に由来するだけでなく、実はモナド内包表記の具象化で(つまりこれらの内包表記は対象をモナドまで一般化した上でモナド内包表記として扱われることもある)手続きによる個別の変数や領域確保なしに目的のオブジェクトを表現できる

ジェネレータ/コルーチンそれ自身はスタックフル/スタックレス問わずステートフルなものなんだけど、わざわざ事前に領域を確保しなくても逐次計算して要求された値を返す事ができるオブジェクトとしてのイテレータを扱えるという点で先に記述した面々と相性がよく、嬉しい
2020/09/22(火) 14:47:50.51ID:6o8of7S0
>>412
> ぜんぜんちがうことだから。
だからぜんぜん違う理由を言えとw
2020/09/22(火) 14:48:54.36ID:6o8of7S0
>>414

> Pythonは根本的に関数がOOP的オブジェクトで

func="echo"
$func 1 2 3

これ、動きます。evalいりません
2020/09/22(火) 15:34:54.52ID:KrrXHwz7
>>416
それはそれで別に良いんだ
途中で勝手に切らないで全部読んでくれ

追加で説明するとPythonはそれらの特徴から
・関数を受け取って別の関数にして返す関数(この時点では引数の受け取りと評価はしていない)
 (ex.関数に必要な引数を部分的に与えて残り必要な分の引数を受け取る別の関数にして返す関数)
・関数を受け取って複数の値が纏まったiterableオブジェクトに個別に適用し、複数の値が纏まった別のiterableオブジェクトないし2引数演算子によって纏められた単一の値を返す関数

っていう関数に帰着させられるし、何よりmapのようにあくまで受け取るのはcallableとiterableでしかないし、partialのようにcallableと対象になる値でしかないという所まで一般化されてるのが重点なんだ(静的型付きの言語なら更にそれの妥当性も検証できて嬉しいんだけどPythonも実行時には最低限型やメソッドのレベルで整合性見てエラー吐いてくれるけど)
一方シェルスクリプト、そのレベルまで一般化されたコマンドはそう多くないし、自分で書く分にはむしろ1つのことを上手くやるように具体的なコマンドをゴリゴリ書くと思うんだ
扱う対象に関してシェルスクリプトだって文字列として一般化されてるじゃないか、という意見もあると思うけど、表現能力が貧弱で一緒になってしまったものと、意味表現された上でこの基準に合えば同じものとみなせるっていうのは違うよね、違わない?
2020/09/22(火) 17:48:16.01ID:cIkntQZr
>>415
逆。
同じであることの理由を言うのが先。
理由もなく、全然関係ないことを持ち出してもダメ。

https://ja.wikipedia.org/wiki/%E8%A9%AD%E5%BC%81
おまえの理屈は、詭弁の話しかたのいくつかにあてはまる。
それを説明するのはさすがにイヤなので、このままであればそろそろ相手を放棄する。

ま、がんばれや。
とりあえず国語からな。
2020/09/22(火) 18:17:27.25ID:J3IrN4Ey
functional-styleは日本語に訳すと「関数型風」
関数型と関数型風の違いは中華料理と中華風の料理の違いと同じ

中華風と呼ぶには作り手が意図的に中華料理に寄せる必要がある
意図せず結果的に中華料理に似た特徴をもったものを中華風の料理とは言わない
それは中華っぽい(見た目の/味がする)料理

もちろんどんな料理でも中華風と主張するのは作り手の自由だが
中華風として受け入れられるかどうかは別の問題

関数型風はPythonはコミュニティに受け入れられたけど
シェルスクリプトのコミュニティには受け入れられていない(受け入れられそうにもない)
理由が知りたければ受け入れられている関数型風との違いを知る必要がある
2020/09/22(火) 18:19:34.74ID:6o8of7S0
>>419
「○○風」の定義の話ですか?
それはお前の定義ですよねw
2020/09/22(火) 18:20:37.37ID:6o8of7S0
>>417
質問に答えてないね。
なぜPythonのドキュメンは「関数型スタイル」と書いてあるのでしょうか?
2020/09/22(火) 18:24:13.02ID:6o8of7S0
Pythonは関数型として作られたのではありませんね。
使う側が工夫することで関数型スタイルにできるという話です。

ハンバーグは和食ではありません。和食として作られたわけではありません。
工夫することで和風にすることができるのです。
それが和風ハンバーグです。

シェルスクリプトも関数型スタイルにできるのです。
2020/09/22(火) 18:33:53.89ID:OaSKQeOx
内容のないレス連投
2020/09/22(火) 19:46:26.11ID:KrrXHwz7
>>421
それは読めて欲しかったな
結論だけ先に言うと「関数型言語では先に述べたような関数とデータの扱いが基本なのでそれをPythonにおいて多用する事を関数型スタイルだと述べても批判は少ないが、シェルスクリプトにおいてコマンドを関数と見立ててデータの1in1outの形態の類似性を見ても、それ以外の先の2つに見られる関数合成・部分適用・一般化された高階関数の取り扱いが多用されていない(し多用するには苦痛を伴う)ので関数型スタイルだと述べて批判が来ることが多い」

まず関数型言語っていう言葉がnot well-definedなんだ
関数が第一級オブジェクトであるとこは必要条件であって十分条件でない
一般的にPythonもC++もマルチパラダイムであって大手を振って関数型言語とは呼ばれないと思う
じゃあ関数型言語ないし関数型スタイル、関数型風他類似の名称が何を指してるのか
スタイルは言語のデザイン方針に依存せず自身の書き方で決まるだとか風は更にふわっと雰囲気だけとか細かい部分はあれども結局言語機能の方針やコミュニティのお気持ちで決まってるんだ
ただより豊かに、つまり制約を多く持たせる事には当然批判は少ないと思う
それは既存の言語を参照して帰納的に(ここお気持ちポインツ)考えられる訳で、MLとHaskell(と少なからずLisp)を見た上で出てきたのが、ラムダ式だったり関数合成であったり部分適用だったり一般化された高階関数だったり、Pythonにないものだとデフォルトイミュータブルだったりカリー化だったり静的型付けだったりHM型推論だったりパターンマッチ(正規表現のそれではない)他リッチな型機能だったりモナドだったりするんだ

(続く、長文ごめんね)
2020/09/22(火) 19:47:21.14ID:KrrXHwz7
>>424
じゃあその増えた制約のうちどれだけを持っていれば関数型風なのか、どれだけを使って書いていれば関数型スタイルなのか、全くなーんにも決まっていない

その中で君が言っている「シェルスクリプトはいい感じに書くと自然に関数型スタイルになる」というのは「1in1out形式のステートレスなインターフェース(1スクリプトだけ見た時内部的に状態を持っていたとしてもinとoutだけ見るとそれらの関係は一意に定まる)を持っている」がベースなんだと私は読んでいる
次いでコマンドを受け取るコマンドの存在と、文字列をコマンドとして解釈させる事が可能である事くらいか(この辺はむしろ反論に対するアンサーとして出てきた側面が強いが)

これと比較するとPythonがどうかというと、より豊かで多い制約を満たす関数型の要素を持っていて、それらを活用して書くことができる
その多さがどのくらいなら関数型スタイルで書けるのだと喧伝していいのか私も知った事ではないし、全人類に検証可能な必要十分な定義はない
少なくともこんだけ続くくらい批判は来てるし、私は関数を引数と戻り値で(つまりシェルスクリプトなら標準入出力で)引き回してもないのに何が関数型スタイルだという気持ちになっている

これは蛇足だけど標準入出力と引数が切り分けられてるのも実用上は理解するけど、カリー化を導入するくらいの数学や関数型の一般化してく文化とは噛み合わせが悪いなぁと思ってるよ

ね、個人の感性だし気持ちの問題でしょ?
2020/09/22(火) 19:58:05.93ID:aoFeMTcw
だから、関数型スタイルと言っていいわけですね。Pythonも関数型スタイルと言ってますからね。
2020/09/22(火) 20:11:05.91ID:KrrXHwz7
分かってて言う分には誰が何を言ってもしゃーないしそもそも君の自由でもあるしそれでいいんじゃない?
知らんけど
2020/09/22(火) 20:40:23.93ID:cIkntQZr
>>426
Pythonに頼んな。w
Pythonのほうはきっと困ってるから。
だいたい、Pythonのドキュメントが一般に通用するかも定かでないのに。

自分の言葉で、自力で頑張れよ。
2020/09/22(火) 20:40:40.82ID:cIkntQZr
>>427
とつぜんあきらめんな。w
2020/09/22(火) 22:14:39.02ID:J3IrN4Ey
>>422
>工夫することで和風にすることができるのです。

和風にするためにどういう工夫をしたの?
和風と名乗るのは自由だけど食べる側がそれを和風料理として受け入れるかどうかは別問題

シェルスクリプトを関数型風にするのにどういう工夫したの?
関数型風シェルスクリプトを謳ってるけどそれは今のところ受け入れられてないよね
なんでかな?
2020/09/22(火) 22:54:40.10ID:TWSwG1ae
> シェルスクリプトを関数型風にするのにどういう工夫したの?
関数からの戻り値を標準出力への出力にした
これにより別の関数に流れるようにデータを渡せるようになった
2020/09/23(水) 01:38:09.58ID:ekwcF8Ey
>>431
シェルスクリプトを語る前に、ふつうのシェルでコマンドラインを実行してこい!
2020/09/23(水) 02:07:45.81ID:2ZA3ZE+E
無駄だぞ、そのレスで意図してることも多分わからないだろから
2020/09/23(水) 13:32:17.22ID:BgUeNus/
lsコマンドをシェルスクリプトの中で使う場合ってなにかある?
ファイルの列挙に関してはfindコマンドや,もっと簡単にグロブとかを使った方が
余計な書式を含まずに処理しやすいし,
ファイルの情報に関してはtestコマンドの方が一発で分かる
(例えばディレクトリかどうかはlsコマンドの場合権限欄の情報を文字列として
解析しなくてはいけない(先頭にdがあるかどうか)が,
testコマンドの場合はtest -e && test -dで完結する)

lsコマンドを使わないとできないシェルスクリプトでの処理ってなにかあるかな。
興味本位でききたい(言わずもがなだけどlsコマンドが不要!とかそういう話ではなく)。
2020/09/23(水) 13:37:39.50ID:ekwcF8Ey
findの困るところ :
ディレクトリをもぐる。
ドットファイルを避けない。

ふつうに見えてるファイルだけを列挙するときはls -1がもっとも便利。
2020/09/23(水) 14:50:49.40ID:vSGAtuQW
シェルスクリプトの中でlsを使うメリットとしては
可読性が高くなるというのはある
findとかだとごちゃごちゃして見にくい
\が必要になることも多いし
2020/09/23(水) 16:13:40.06ID:9Qi89m1Q
>>434
lsはPOSIX準拠。POSIX準拠でファイルの属性を取得する場合、lsコマンド一択となる
2020/09/23(水) 16:14:33.84ID:9Qi89m1Q
ファイルの属性とは例えばパーミッションやファイルサイズなど
これらを取得するコマンドがls
2020/09/23(水) 16:16:36.13ID:9Qi89m1Q
> ファイルの情報に関してはtestコマンドの方が一発で分かる
testでわかるのは、自分が何をできるか?(書き込み等)だけ
他のユーザーのことはわからない
2020/09/23(水) 16:18:45.57ID:9Qi89m1Q
.sshディレクトリは自分は読み書きできるが
他の人は読み書きできてはいけない
ということを、testコマンドでは確認することができない
2020/09/23(水) 16:29:52.08ID:A5kzXZmA
これだけの文章を纏められない奴
2020/09/23(水) 16:40:38.03ID:BgUeNus/
>>435
それは対話的な使用での話で,
シェルスクリプトの話じゃないです。
2020/09/23(水) 16:43:09.16ID:BgUeNus/
>>439
あーこれはあるな。
thx
2020/09/23(水) 16:47:01.90ID:ekwcF8Ey
>>434
> testコマンドの場合はtest -e && test -d
ちなみに、test -eはイランで。
-dに含まれとる。-fとかも同様。
2020/09/23(水) 16:49:53.24ID:ekwcF8Ey
>>442
いや、シェルスクリプトでもやけど?
-excludeとかいちいち書くの面倒。
2020/09/23(水) 16:53:59.75ID:YMosw178
>>440
ちなみにそれをlsを使ったスクリプトで書くとどうなるんでしょう。
2020/09/23(水) 17:12:18.91ID:9Qi89m1Q
>>446
ちゃんと確認してないけどこんな感じ

case $(ls -dl -- "$file") in
????------*) echo 他の人は読み書きできない
esac
2020/09/23(水) 17:16:04.24ID:9Qi89m1Q
ファイルサイズなんかもstatだとLinuxとmacでオプションが違うからな
2020/09/23(水) 19:03:55.60ID:ORLEAcPg
自分で読み書きできるのかだったらtestの方が簡単だわな
rootで他のユーザではだったら素直にsudo使えばだしな、自分でごちゃごちゃ書く必要もなく
2020/09/23(水) 19:12:36.11ID:ekwcF8Ey
>>447
SELinuxだとダメなときがあるな。
頭にドットがついたりしよる。
2020/09/23(水) 19:17:09.45ID:9Qi89m1Q
>>449
testではだめな場合があるって話をしてるのに、話を元に戻すな

それからパーミッションと実際に読み書きできるかは厳密には異なる
お前が持ってきた、そのrootがその一例だな

所有者rootでパーミッションが000。パーミッションを見れば
読み書きできないが、実際にはrootで読み書きできる
2020/09/23(水) 19:22:23.40ID:9Qi89m1Q
>>450
lsの出力は(基本的なものは)POSIXで決まってるはずだがSELinuxはドットがつくんか?
SELinuxがPOSIXを歪めてるってことになるんだがそれは本当なのか?
画面でそう出力されているからって、シェルスクリプト(出力先がttyでないとき)でも同じとは限らんぞ

例えばGNUのlsはファイル名に改行などが含まれている時、
画面に表示した時はエスケープされていてこれはPOSIXの仕様を逸脱してる。
しかし出力がttyでないときはPOSIX準拠の動作をするので互換性は保たれている。

まあ本当にドットが付いていたりするなら、それを取り除けばいいだけだが
2020/09/23(水) 19:24:51.56ID:9Qi89m1Q
>>450
軽くググったがドットがつくのは頭じゃなくて後ろじゃないのか?
パーミッションの後ろであれば、追加で何かをくっつけてもPOSIX的にはOK
macOSでも何かくっついてたはずだな
それもちゃんと考慮しての ????------*) アスタリスクだ
2020/09/23(水) 19:29:08.48ID:ORLEAcPg
>>451
なに当たり前のこと言っているのだか
rootも自分が読み書きできるのかなんだから当然だろ、そう言う権限があるんだから
なに必要もないことしてんだかなってとこだな
2020/09/23(水) 19:30:24.99ID:9Qi89m1Q
>>454
人の話聞こうか?
.sshのように、他の人が読み書きできないことを
チェックするときにtestは使えないって話をしてるの
だから戻すなと言ってるの
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況