◎正当な理由による書き込みの削除について: 生島英之とみられる方へ:
関数型言語一般 [無断転載禁止]©2ch.net ->画像>1枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1491001920/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。
関数型言語について。
言語同士の比較、おすすめ、不満点など。
>>5 当初のLispはともかく、現在のLisp、ことにCommon Lispで書かれてるのなんて関数型の香りが皆無な
手続き的なスタイルのプログラムなのでは。
まだしもSchemeならば関数型っぽいコードを書いている比率は高いでしょうが。
>>6 >>2はまあ最近の
流行言語だけ並べたんだろうけど
ClojureはLispのJVM方言で
Lisp知らなくていきなり
読み書きできないと思うよ
あとScalaもオブジェクト指向寄りだし
Lispがマルチパラダイムなのは問題ない
F# は、MSお得意の取り敢えず流行に乗る戦法でしょ。 関数型とはいいつつも、.NETとの相性を重視しすぎてるから。
F#もScalaもOCamlの
マルチパラダイム路線
純粋関数型だとユーザ減るのがまずあるだろうし
あと.NETやJavaのライブラリがOOだから
関数型で一貫させるのが難しい
>>8 > F#は関数型風なだけでは
確かにF#には破壊的な代入(普通の手続き型言語での代入文や代入演算と同等な操作で状態やメモリの概念が前提)はあるから
厳密な意味では関数型ではないが、それを言い出すとOCamlなどのML系の言語は全て関数型風なだけになってしまう
F#はMicrosoft版MLというのが私の見方です
もちろんsetq(Schemeはset!)のあるLisp系の全ての言語も関数型でなく関数型風なだけになるし
その基準だと純粋に関数型と言えるのはHaskellや昔のMiranda, Goferなどlazyな言語のいくつかだけになるだろう
lazy evaluationは破壊的代入や例外処理とは相性が悪い…すっきりとして一貫性のある意味論を構築するのが困難なので
否応なく純粋な関数型にならざるを得ない
ScalaだってValとVarがあるから
F#だけ仲間はずれにする意味が分からん
つーか非純粋の方が普及して
メジャーなんだから仕様がない
わざわざ趣味プログラミングに
関数型言語使わなくてもいいだろ
>>16 関数型プログラミング言語の利用シーンにはどんなものがあるの?
>>18 1. 参照透過でバグを減らしたいとき
2. 並列計算をしたいとき
3. 複雑な処理をしたいとき
むしろ関数型言語が向かない場面とかムッサゴリゴリ最適化したい場面ぐらいしか無いと思うんだが
ゲームみたいに複雑な状態遷移は
オブジェクト指向の方が組みやすい
>>21 8x8マスに白か黒か何もないかしかないだろ。
これだけ人気ないのにC++、Java、C#にムラダ式なんて追加すんなよ。迷惑極まりない。
>>24 数学人気あるとは思わないけどすごい重要だろ?
まあバカは数学使わなくても生きていけてるみたいだからそういう世界で生きてればいいと思うよ
こういう馬鹿のせいで人工衛星が制御不能になって落ちるんだよ。
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
UBD4D
Scheme 始めたんだけど、本やサイト見ると最初のほうに「末尾再帰」が出て来る。
これって、関数型プログラミングの本質じゃないよね?ただの最適化技法だよね。
ただの最適化技法ではあるけど、関数型を徹底するとループカウンタを書き換えられないので
ループは再帰でやるしかないから末尾呼び出しの最適化が無いとすぐスタックオーバーフローして死ぬ
なるほど。
でも、最適化はコンパイラの仕事だしなぁ。
何の説明もなく「末尾再帰」「末尾最適化」が出てくるのはどうなのよ?
階乗は、(1 2 3 ...) ってリスト作って乗算オペレータに渡せばいいと思う。
(* 1 2 3 4 5 6 7 8 9 10)
>>36 Schemeでは末尾再帰形をスタックを消費しないループ同様の実行をするというのが言語仕様において規定されている
だから末尾再帰のプログラムをスタックを消費する普通の再帰の実行方式で実装する処理系はSchemeの言語仕様を満たしていない不完全な処理系ということになる
関数型言語を学びたいけどぜんぜんわからん
何となくやりたいことはわかるけど、それとコードがリンクしない
プログとか読んでも頭いたくなるだけだし
頭好い人にはいいのかもだけど、俺みたいなお馬鹿プログラマにはかける気がしない
ちな関数型のどの辺?FreeMonadとかやらんでいいぞ
どの辺と聞かれると困るんだけど
モナドの考え方とか
値は変えちゃいかんとか
変数はラベル的にとらえるとか
副作用がどうとか
とにかく今までの考え方を壊して、見方を変えねばならんのかなと思った
へんなブログ二本も読んで始める前から嫌いになったわ
おとなしくc#でラムダでも書いてるわ
>>41 自分はF#とかなのでなるべくイミュータブルに書くけどミュータブル使うとこは使うよって感じですね全部イミュータブルでもシステム書けると思うけどミュータブルで書いた方が手っ取り早いところも多々ありそう
同じような内容のものをC#からF#に作り直してコード1/5、バグ激減、むしろ速くなったところも多々など言ってる記事あったな
同じものを作り直したからじゃないの?
2つのチームに全く同じものを初めて開発させてどうなるか、みたいな実験が行われないと分からんな
JavaとかVBは検索すると生産効率の調査が行われてるんだけど
>>46 まあ自分で書いてみりゃC#に比べて明らかにコード短くなるしバグも少ないのは実感できるかと
学習コストは高いけど魅力的
大学の授業でこそやってほしい
関数型の授業受けてみたいよなあ...
関数型はデバッグが難しいみたいな話聞くんだけどどうなの?
https://gist.github.com/Gab-km/2419511 >JavaとScalaの開発を比較した最近の実験に基づいた Pankratius,
SchmidtおよびGarretonらによる研究 は、
そんな大勝利を明らかにはしなかった。
確かに、恩恵(関数型のコードが想定よりいいパフォーマンスを出し、
よりコンパクトになった)はあったものの、生産性の結果は、せいぜい、
まちまちだった。Scalaプログラムは目的を成し遂げるために同じか、
それより多くのプログラミングの努力を要し、
またデバッグがより難しくなった。
関数型は標準関数や備え付けのメソッドが増えれば増えるほど簡単になりそう
もちろん非純粋関数じゃだめだけど
>>49 自分はF#で純粋関数型ではないけれどミューテートする場所が限られるしデバッグむしろしやすいと思うがな
何をもって難しいと言ってるのだろう
Haskellはデフォルト遅延評価なので慣れていてもその部分のデバッグが難しいという話をする人は居る
Clojureはやはりデフォルトで遅延シーケンスが多く、JavaとClojureのエラーがズラッと並んで慣れていてもデバッグがしんどいという話をする人がいる
後者のエラーメッセージはだいぶ読みやすくなったらしいが昔のはマジでしんどい
関数型と一纏めにされがちだけど関数型のデバッグがしんどいというのは遅延評価のデバッグがしんどいという話であることが多い気がする
ああ正格じゃないとちょっとデバッグめんどくさそうというかどうすんだろ
ここ呼ばれるはずなのに呼ばれてない、呼ばれたと思ったけどこの値じゃネェェいつのだコレってなるのかな
>>49 非純粋な関数型言語はデバッグし易いと思う。
Haskellはdo形式の複数行のプログラムが、モナドに直すと一行の式になるって言うのを意識しないと
$使って下の式全部も括弧で囲むと解釈される事があるから、理解不足の頃ハマってた。
後は型エラーが多いかな。
デバッガ頼りにするより、自分がその関数の挙動を理解してるか?がデバッグの近道。
コピペしてきても、そのコピペしたコードを理解してないとデバッグ出来ない。
シンドイけど、エラーが無くなったらほぼ思った通りに動く安心感はある。
scalaは開発効率が悪いと言ってる記事見つけた。
https://grundlefleck.github.io/2013/06/23/using-scala-will-make-you-less-productive.html やっぱり良く使われてる言語の方が、総合的に見て一番優れてるんじゃないかな
コンパイル時間の差とか、意外なところが問題になってくるから
結局haskellの非正格評価はやりすぎってことだろ。
lispマクロみたいにちょこっと入れるくらいがちょうど良いってことだな。
みんなすごいな
40越えたおっさんが先週「すごいHaskellたのしく学ぼう!」買ってきた。
ざっくり読んだけどおっさん、理解するのに3年くらいかかりそうだわw
ちなみにSICPは14ページ過ぎたあたりの練習問題で挫折して以来、20年くらい地下結界に閉じ込めている(おっさんが持つと頭がおかしくなって死ぬ)
>>60 コンパイル時に正格評価に部分的にしてるし(Haskellは全部非正格評価だと末尾再帰でもスタック消費する)、今後それを拡大しろって話もある。
並列処理のリストは正格評価にすべきとか、zipWithにもfoldl’みたいに正格評価版のzipWith’が欲しいとか。
>>61 拙著で悪いが、すごいH本で挫折したらamazonでHaskell入門以前(108円)と言う電子書籍を売っているので、
それで手続き脳の価値観を関数脳にしてからの再挑戦を勧めます。
Haskellは、ほぼ数学エミュレータ。
>>64 108円だったら広告つけてwebで公開してくれません?
>>65 パブーでは長い事無料で公開してたのですが、パブーが潰れまして(T . T)
途中からamazonに合わせて108円にしましたが、パブーが潰れてなければ無料設定出来たので期間限定で無料化も出来たのですが。。。
(amazonでも無料にしたかったけど、項目が無く断念。最低価格の108円に)
パブーの編集機能で書いたので、それ以外の編集の仕方が分からず広告を付けるとかは出来そうにありません。。。
1人だけですが素人の作品に星を付けてくれて、お褒めの言葉を頂いているので108円の価値は一応あるのかな?と。
amazon何とかに入ってると108円のは無料で読めるらしいので、多分それで読んでもらったのでしょうが、
価格に見合った内容になる様に書いたつもりですが、こんな内容で108円は高いとか文句書かれてないのにホッとしてます。
5年で7000円の売上(期待してなかったので最近まで放置してた)ですが、一応そこそこ売れてます。
(108円だと70%が著者の取り分(価格によって取り分が違います)なので100冊は売れてる?)
>>67 Amazonってことはフォーマットはazw形式ですか?
https://jp.epubor.com/guide/kindle-azw3をpdfに変換/
と
https://github.com/coolwanglu/pdf2htmlEX でhtmlに変換して広告入れるとかでうまくいかないでしょうか…
広告収入詳しくないけど5年で7000円なら上回れないかな?
>>63 いやだから言語としては非正格な仕様なのに実際の裏側では色々最適化してる
ってのがそもそもおかしいでしょって思わん?
明らかにチューンする際に変な手間とることになるし。
理屈が破綻してるとしか言いようがない。
それ言ったらガベコレもおかしいよなって話になんじゃ
>>70 ガベコレはやってることがそこまで複雑ではない。
まあ最低限の知識はないと確かにリークさせるコードも書けるって問題はあるが。。
少なくとも評価順序の違いほど大きな影響のでるものじゃない。
>>71 ガベコレも方式によっては途中で止まったりでパフォーマンスチューン難しくなって、その辺が正確がどうかとかと一緒だって話だよ。まあ程度は違うと思うけどな
>>68 新たに本を書くとかなら検討しますが、すでにお金を払ってくれた方が100人も居るとなると、
無料化はちょっと裏切り行為みたいな感じなので、辞めておきます。
無料にしたかったのを泣く泣く108円で売っていた通り、お金の問題では無く、買ってくれた人へのけじめとして。
>>73 >>65みたいな奴の言う事相手にしなくていいと思うの
kotlinは関数型言語とは言われないと思うんだけど
関数型言語とそうでないものの目安って何かないかな?
厳密な部分は置いといて「この機能があれば」とか
「この実装がやりやすければ」的な目安になる要素はないのかな。
それとも言ったもん勝ちで実は大差ない感じ?
まあ結構テキトーだわな。
https://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0%E5%9E%8B%E8%A8%80%E8%AA%9E この表にある「純粋」の項目が純粋なやつの方がより関数型だとは思うけど、
まともに使い物になるやつが全て「非純粋」ってのがなんだか皮肉。
関数を引数にとれるか、そういう高階関数をユーザが自由につくれるか、だと思う。
関数がファーストクラス、デフォルトイミュータブルとかかなあ
関数を組み上げることでプログラムするってのが主方針になってるもの、で、そうすると
>>78みたいなものも付随して出てくる感
そも関数って扱いができないから、言語が関数をサポートしてるとは言えないんじゃ
>>80 肝心の質問が誤記で何を訊いているのかわからないが
高階関数の引数になるの?→そういう高階関数があればなれる
高階関数(へのポインタ)になるの?→そういう高階関数があればなれる
高階関数の戻り値になるの?→一般的には無理。ファンクタのようにワンクッションおけば可
まあ関数クラスを無理やり作ればできるといえばできるな。
カリー化、関数合成あたりはクラス作成の良い例題になる気はする。
実装がめんどくさいのは非正格評価な部分。多分マクロ使うしかない。
関数型言語を学びたいんだけど
まず最初に学ぶべきはscheme?
ループ文よりこれが数学風の書き方に近いと(VBA)
Function sum(n As Long) As Long
If n > 0 Then sum = n + sum(n - 1)
End Function
でもスタックオーバーフローが未解決なの?
ならGoToで
Function sum_go(n As Long) As Long
GoSum: If n > 0 Then sum_go = sum_go + n: n = n - 1: GoTo GoSum:
End Function
これじゃ数学風じゃない?
それでいいならこれでもいいじゃんね
Function sum_do(n As Long) As Long
Do While n > 0: sum_do = sum_do + n: n = n - 1: Loop
End Function
ループに戻ったねw(そもそもそれでいいとも言われてないが)
逆にプログラマから見れば、「条件判定で繰り返し」ってWileじゃんていう
それに、1+2+3…を10+9+8…にする方が捻くれてるようなw
でも数学者がループスパゲッティでイラっとする気持ちは分かる
>>80 Cの関数は厳密には値を返すのは関数で、値を返さないのは手続きなんだけどね。。。
Pascalでは厳密に分けられてる。
schemeやるならSICPが理解できるようになろう
https://sicp.iijlab.net › fulltext
html版SICP - 計算機プログラムの構造と解釈 第二版
>>88 関数型言語を使い始めるとあらためてPascalって偉大な言語だなと思う
C言語でステートレスな関数で関数ポインタとかも使いながらコーディングすると
関数型言語とほぼ一緒じゃないの?何が違うの?
イミュータブルかそうじゃないかって
いちいち新しい変数を使うか同じ変数を使い回すかでしかないでしょ?
そんなに重要?
そもそも関数を適切に設計したら20行以下になるし
イミュータブルな変数がそんなにコーディングを助けるか?
>>82 なんで関数ポインタを返す関数作れないの?
ポインタを返す関数は作れるみたいだけど、関数ポインタは無理ってこと?
やっぱりCで関数ポインタを返す関数作れるのでは?
"関数ポインタを返す関数"
これでぐぐったらたくさん出てくるよ。
>>91 正格評価な関数型言語とCだったら、Cでも頑張れば同じ様にはできると思う。
(言語としてイミュータブルに書きやすいかどうかの違い)
遅延評価の無限リストは正格評価な言語だと無限ループと等価だから、発想の転換が必要。
何度例として出したか分からないが…。
以下はCなどで言う無限ループなプログラムである。
注目すべきは"Hello World!!"を1文字ずつ消していくのと、["/","|","\\","--"]を順番に表示して回転してるように見せる処理を
Cでは無限ループの中でそれぞれ管理しないと行けない(片方はforに管理を任せられるが)が、Haskellはただ無限リスト同士をzipするだけである。
Haskellでは無限ループは無限リストとして線形に進み、Cではグルグル回る。
この例で、しいてHaskellで無限ループと言えるのは組込関数cycleの定義のみ。
cycle xs = xs ++ cycle xs
これは関数型かどうかではなく、正格評価か遅延評価かの違い。
import Data.List
import System
main = mapM_ put $ zip hellos marks
hellos = (cycle.tails) "Hello World!!"
marks = cycle ["/","|","\\","--"]
put (x,y) = do putStrLn (x ++ "\n" ++ y)
system "clear"
ごめん。
Cではそれぞれ管理しないと行けないと言うのは言い過ぎた。
cycleの無限リストは擬似的なリングリストだから、Cでもリングリストで管理不要だった。
遅延評価ねぇ・・・
・使われない値を関数の引数に渡すとしても、その値が既に計算されて存在しているなら大したロスではない。
・関数内部の条件分岐によって値を使うか分かれる場合でも
値を取得するための関数ポインタを渡しておけば、不要なら呼び出さなければいいだけ。
正格評価でも無駄な値算出を避けれる。
遅延評価の本質的メリットとは?
ネットワーク越しのDBサーバがあるとして
1回の通信でオブジェクトを取得しておくのと
オブジェクトの各値を遅延評価で必要になったものだけ取得するのと
どっちが効率が良いか?
後者は1つ1つの値のためにいちいち通信が生じる。
この問題はネットワーク越しでなくともある。
サブルーチンの呼び出しではスタックにローカル変数を積む等の処理があるはずで
僅かだがコストがある。
関連する値を一斉に算出/取得するのと、必要になった部分のみをいちいち算出/取得するのとどちらがいいか?
コンピュータにおける値の算出とは実質的にネットワークやストレージアクセスを通じた取得処理である事も多い。
時間のかかる計算的算出であれば回避するメリットは大きいが、
ネットワークやストレージの場合1度にまとめて取得しておいたほうが良い場合も多い。
無限リストについて言えば、
「要素番号を入力して要素を取得できる関数のポインタ」
を引数に渡せばいい。
遅延評価の必要性がどこにある?
たぶん遅延評価の文脈では参照透過性が必須だからオブジェクトなどありえないということか?
でもオブジェクトを使わないにしても遅延評価の必要性は不明だ
>>95>>96
高階関数の返値としての関数ポインタは、引数の値毎に別のポインタを返さなきゃならんわけよ。
引数の種類が限定されていればできなくもないだろうけど。
>>104 >引数の値毎に別のポインタを
こういうこと?で返値の「関数ポインタの引数の数や型」が揃っている保証がないと?
f(int v){
switch(v){
case 1:
return 関数ポインタ1;
case 2:
return 関数ポインタ2;
...
}
}
引数じゃねえな。その高階関数の値域が限定されていれば、だ。
>>100は遅延評価がIOをどう効率的に解決するかが分からないという事。
あと遅延評価より「手が空いている時に先に取得/計算しておく」
という仕組みが最強だろうという考えもあって書いた。
そこまで考えると遅延評価なんて何がうれしいのか分からない
>>105 揃っているかどうかは(コンパイラがチェックしてくれるだろうから)関係ない。
その「関数ポインタ1」や「関数ポインタ2」をあらかじめ全部用意しておかなきゃならんというだけ。
>>108 コンパイル時に静的に存在している関数のポインタしか扱えないということ?
>>100だけど参照透過性が必須ならDBやネットワークは扱えないか。
しかし更新されない読み取り専用のDBがあったら話は別だ。
地理・住所系DBとかでしばしばそういうのはある。
遅延評価なら必要になった最小の部分のみDBから取得する事になるだろうが、
DBはネットワーク越しになっていたりするから一度にまとめて取得した方が良い場合がある。
遅延評価による無駄な計算の回避という主張点がどうなのかという話。
さっき書いた通り関数ポインタを渡して必要な場合のみ呼び出すという事でも無駄な計算を回避できるし、
読み取り専用DBの例は必要になった値のみ作成するというアイデアが必ずしも効率的ではない事を示している。
ストレージアクセスは4KBアクセスに最適化されているし
ネットワークもある程度のサイズに最適化されている。
そういうサイズを下回るくらいの細かなアクセスは性能を向上させない。
だから1オブジェクト単位とかまとまった単位での取得は性能を劣化させない場合がある。
遅延評価は読み取り専用DB(参照透過を保証できる)に無駄に細かい単位でのアクセスをするんじゃないか?と
その思想を聞いた限りでは思ったのだけど。
これらのシステムはある程度まとめて情報を用意するというスタイルが基本になる。
・オブジェクトを使う
・オブジェクトを使わないが正格評価
しかし遅延評価はそれを避ける事を理想としているように聞こえる。
(そうでないなら遅延評価の目指すところは何?)
>>100でサブルーチンのコストの話を出したが、
特殊なクラスタで仮想的な1台のコンピューターを扱う場合、
サブルーチンが水面下でネットワーク処理をする場合がある。
そこまで考えると関連性が高い値をまとめて作成したり
少なくとも値の作成タイミングをプログラマーが制御できたほうが良い可能性がある。
>>104が言ってるのはもしかして
Javaのラムダみたいに呼び出し元のローカル変数をコールバック関数から参照できるという話?
いわゆるクロージャー?
そうか、関数ポインタだと呼び出し元のローカル変数を扱おうとした場合
それらローカル変数分も高階関数側に宣言しなきゃならない。
ところがそれらローカル変数は呼び出し箇所それぞれの事情で存在しているもので
高階関数側に宣言するのはおかしい、みたいな話か。
それでも1つ任意データへのポインタを持たせて
そのポインタからのバイナリフォーマットについて呼び出し側が留意するなら
クロージャーと同じ話になるだろうけど。
ローカル変数一覧へのポインタAと関数ポインタBを高階関数に渡して
Bを呼び出す時にAを渡して、Aの扱い方はBに任せる、
という事ならクロージャーと同じ事ができるはずだ。
C++のファンクタはJavaの関数型インターフェースに相当するものか
ffcallでCでもクロージャが簡単にできるみたいだ。
やはりCと関数型の差異はイミュータブルと遅延評価しかない。
モナドは、例えばサブルーチンとgotoは違うモナド、みたいな事?
言語側が勝手にやるモジュール化のための基本処理をモナドと言っている?
なんとなくわかった
値という概念の亜種みたいなもので、
関数型言語では「現在のプログラムの状態は?」と聞かれた時
値だけで説明できずモナドをまじえて説明するのか。
そうする事でユーザー入力みたいな純粋関数にしえないもの、つまり
「参照透過性を破壊する性質の値」をモナドとして扱う事で
一旦プログラム状態の説明としては参照透過性があるという事になるわけだ。
要するに参照透過性を破壊する値にある種のマーカーがついてて、
参照透過性を前提としたあれやこれやをする時に問題が生じそうなら
そのマーカーがついてるとこだけ注意すればいいみたいになるのだろう。
モナドはアクションが実装しているインターフェースみたいなもので、
”アクションをつないで行ける”という機能性を指すもの、か
C/C++/C#、それとあとjavaとpythonをかじってみたいな流れで来てるんだけど幅を広げるためにちょっと関数型言語に手を出してみようかなって
ざっと見た感じすごいhaskellから入るのがいいんでしょうか
すごいハスケルは型のことそんな書いてないからその辺求めるなら別のがいいかも
モナモナとかにはいいかもね
>>123 Haskell人気でイマイチ表に出ないけど、利用実績十分のOCamlやろうぜ。
C#やってるならF#でもいいぞ!
https://www.quora.com/What-functional-programming-language-should-one-start-to-learn-functional-programming ここなんかでもそうなんだけど関数型言語はじめの一歩ってことでRacketってのがおすすめされること多いみたいなんだよね
このスレでは名前の一回も出てきてやしないけど。もともと学習用?の側面が大きいらしい
日本語の資料ぜーんぜん無いのが辛いところだけど
Haskellの表記の簡潔さを知ったらあの括弧責めは耐えられないなぁ
>>126 Racketの処理系ではSchemeが動くからSchemeを勉強すれば良い
>>127 > Haskellの表記の簡潔さを知ったらあの括弧責めは耐えられないなぁ
Schemeには括弧は多いがHaskellのようにやたらと色んな概念がてんこ盛りにはなっていない
Schemeは作用順の評価戦略を採用したλ-計算に最小限のデータ種別(実行時の型チェック)と最小限の命令的な代入操作(set!など)を追加しただけで
概念的には極めてコンパクトな言語だよ(Revised^6は例外としてね)
他方、Haskellは関数型のAdaと揶揄されることもあるように、委員会言語の常で取り入れられる概念は何でもかんでも取り入れて複雑極まりない言語に仕上がった
表記上は括弧がなくてオフサイド・ルール(インデンテーションによる括弧の代わり)を採用しているので見掛けだけは簡単かも知れないがな
>>128に大事な1行を書き忘れてた
> Racketの処理系ではSchemeが動くからSchemeを勉強すれば良い
つまりSchemeの教科書は日本語でも何冊かあるからってことです
>>128 >概念がてんこ盛り
例えば?
自分としてはライブラリなんかには色々入っているけど
素の言語仕様は簡素で学習しやすい言語だと思ったけどな。
型の制約があることで却って初学者に抽象的な奥深さによる
幻惑を与えないとも思う。
land of lispで勉強始めたんだけどめっちゃ脳が疲れる
いやー全く未知の概念
Coconutってこのスレでいい?
http://coconut-lang.org/ >>111 遅延評価がアリなら、
MathematicaのSelectTuplesみたいなのを用意しなくても(つまり、Tuplesが
遅延評価してくれるのなら)、
組合せ爆発によるメモリ不足は回避出来るのかも。
https://resources.wolframcloud.com/FunctionRepository/resources/SelectTuples 組合せが全部メモリに載る様な「小さな」問題なら、予め全組合せを計算して、
条件とかに合わないのを弾く事も出来るけどね。
確かにHaskellは他の言語に比べれば多くのことができるけど、
Haskellを使えるようになるためにそれらを全て理解してないと行けないかと言われたらそんなことはない
結局Haskellに限らずどんな言語でも学習する内容を取捨選択する必要があるだけであって、
Haskellが色々できることを問題と捉える必要はない。
問題なのは、学習者が取捨選択するための基準が不透明なのと、
それらを理解してないことに対してマウントとってくる輩がいることかな。
『Land of Lisp』を読んでいるんですがその中で、
「純粋関数」と「副作用のある関数」を分離せよ、とあるんですが
「こうやって分離するんやで」みたいな設計方法について
書かれた本ってありますか?
みたことないの
非純粋関数型について書かれたものだったらどっか章さいてるかもしれんけど
副作用起こすところなるべくまとめて途中ではやらないようにするってだけな気はするが
>>141 テスト駆動開発とかレガシーコード改善ガイドとかあの辺読んだ方がわかりやすいよ。
みなさんありがとうございます。
>テスト駆動開発とかレガシーコード改善ガイド
読んでみます。
あと、調べてたらIOモナドというのも副作用の分離に効果がありそう?
これで思い出したのが、この前読んだSICPの画像言語の章で、
そこではPainterオブジェクトで画像出力(副作用)を包み、それを
使って関数同士を合成してました。
これも1つの副作用の分離で、IOモナドとも関係あるのかな???
うーん
というよりハスケルではIOモナドでしか副作用できんし。
副作用を行うところを明確に分離してるって意味では合ってる
今ある言語の話ではなく、設計の話
配列のsplice(破壊的slice)を参照透明な感じにしようと思ったら、
array.splice(...)は直接arrayを変えられないから、変更後のarrayとslice部分を返す必要がある
同様に、状態を変更するメソッドも変更後の自分と返り値を返す必要がある
xs = [1, 2, 3, 4, 5]
zs, ys = xs.splice(1, 3)
print zs #=> [1, 5]
print ys #=> [2, 3, 4]
なんかダサくね?そうでもない?
別の方法としては、!みたいなプレフィックスを付けて、その場合のみオブジェクトを置き換えるというもの
ys = xs.splice!(1, 3) # xs = [2, 3, 4] も同時に行われる
print xs #=> [1, 5]
print ys #=> [2, 3, 4]
これは参照透明ではないし、xsが定数か変数かによって左右されてしまう
いい方法がないものか・・・
前者でいいじゃん
人を最も驚かせないシンプルな仕様が良い
関数型プログラミングをサポートしている言語
ACL2 / APL / Arturo / ATS / Ayrch / Binary Lambda Calculus / C++ / Ceylon / Clio / Clojure / Common Lisp / Curry / D / DataWeave / Dylan / EchoLisp / Egison / Ela / Elisa / Elixir / Elm / Erlang / Excel / Falcon / Fantom / FormulaOne / Frege / formulae / Golo / Guile / Haskell / Hope / Ioke / J / JavaScript / Joy / Jq / Kitten / Lang5 / Lean / Leon / LFE / M2000 Interpreter / Mathematica / Mercury / MLite / Morfa / Nemerle / NGS / Objeck / OCaml / Ol / Order / Oz / PARI/GP / Perl / Perl 6 / PowerShell / Pure / Purity / Raku / Ruby / Rust / Scala / Scheme / SequenceL / Sidef / SkookumScript / Standard ML / Thyrd / Trith / TXR / Ultimate++ / Unlambda / Ursala / Visual Prolog / Wart / Wolfram Language / Wortel / XQuery / Standard ML / Thyrd / Trith / TXR / Ultimate++ / Unlambda / Ursala / Visual Prolog / Wart / Wolfram Language / Wortel / XQuery
関数型プログラミングしか出来ない言語に絞って欲しい
-curl
lud20250125133245このスレへの固定リンク: http://5chb.net/r/tech/1491001920/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。
TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像
↓「関数型言語一般 [無断転載禁止]©2ch.net ->画像>1枚 」を見た人も見ています:
・橋下徹氏「懲戒請求した一般市民に対して、法的措置を執るこの弁護士たちの態度振る舞いは言語道断。しかも和解金を取るという」
・【IT】捜査機関(警察や税関、労働局等官公庁)向けに納入してきた書き切り型のSDカード「PGS WORMカード」を8日から一般用にも販売
・***難関私大一般合格者数大幅減(前年比)***
・【数学】50年来の信号処理に関するアルゴリズムが解明される、逆高速フーリエ変換がついに一般化
・【社会】一般病院の2割、精神病院の8割で入院患者の自殺あり=予防に関して提言発表/日本医療機能評価機構
・【芸能】松本人志 一般人からかけられる腹立つ言葉を告白「それな」
・【先手先手】政府 新型コロナパンデミック時の優先順位を決定 医療関係者>政治家・財界>マスコミ>一般人
・【Microsoft】Excel関数ベースのプログラミング言語「Microsoft Power Fx」登場 オープンソースで公開予定 [少考さん★]
・AKBが生み出して一般層にまで広まった用語と言えば?
・MARCH関関同立出願参考情報:学部別一般率・総入学者数(理系)
・【コロナ】天皇誕生日の一般参賀を中止 新型コロナ感染拡大防止のため 政府関係者
・【反対集会】山本太郎「共謀罪は一般人に関係ないと言ってるが、我々のような人々は一般人に入ってない。ここにいるみんながアウトだ」
・【新型肺炎】4月には終息?トランプ氏予想、「一般的に言って、あの種のウイルスは暖かさで死滅する」 専門家は批判
・【日本】安倍首相「鉄道の多言語化などを一気に進めていく」東京五輪契機に★2
・【悲報】NMBの関西ツアー6本中2本が完売できず一般最終販売
・スポーツ推薦学生の実態 取得単位の7割はズル、英語はABCから 「ぶっちゃけ僕らが大学の宣伝になる。一般生と一緒にしてほしくない」
・ヲタ「ハロコンで数年ぶりに中野一般2階席入ったら立つ人いないし女性の連番がずっと喋ってるしスマホいじってるし何だここ」
・【佐藤】イベントで漫画家に驕り昂ぶり言語道断ずさん対応をした世田谷区職員が告発された事件、嫌儲民のせいで世田谷区長が謝罪する事態
・4期生はなんと言うか、華がなくて地味だよな?その辺にいそうで一般人っぽい
・高井康行弁護士の発言が話題「拘留されている人と一般人の生活が同じなのはオカシイ」(ゴーン氏の独房に暖房がない事について)
・一般的な日本人が知ってる中国語はたった3つしかないという事実
・海外では役者とか政治に対してモノ言うけど日本だと一般人は黙ってろって空気だよな民主主義が100万年遅れてるのは真実だったんだな
・一ヶ月でプログラミングを理解するのと、何か一つ言語を覚えたいのだが
・ウヨってなんで主義主張や発言に人種差別や部落差別をねじ込むの? 差別をしないだけでも随分なびく一般人は増えると思うんだけど
・一般向け火炎放射器XM42の新型が発売 燃料タンクの増設が可能に
・【アベノミクス/異次元金融緩和】ついに一般預金者にも“マイナス金利”か 日銀副総裁が言及[12/05]
・【金融】ついに一般預金者にも“マイナス金利”か 日銀副総裁が言及
・一般人「漢字メンバーすらまともに言えない、いはんやひらがなをや」
・関西学院大学 一般率36%
・何で俺たち一般人が毎週毎週ゲームの売り上げについて語っているのか?
・(ヽ´ん`)「身長192cm体重96kgの総合格闘技経験者だけど、一般人なら数秒で半身不随にさせられる」 [無断転載禁止]©2ch.net
・安倍晋三「だからすみませんと言ってるじゃないか!」と、一般人に声を荒げる
・【一般参賀】 すでに皇居に数千から数万人が集結しているとの事 ※画像有り
・世界一の巨大都市東京に言語の壁なく生活できるという特権を持っているのに
・プログラミング言語、Python一人勝ち。もうすぐ世界一人気のある言語に
・「見切れる」→見えてはいけない被写体が入ってしまうこと、見せたい被写体の一部が切れてしまっていること これ欠陥言語だろ
・【沖縄】LGBTも津梁会議で 玉城知事、条例制定に言及 県議会一般質問
・野球偏向がヤバすぎワロタ 北海道の最高視聴率24.1%を真っ先に書き、「一般的な視聴率」である関東地区7.9%をひっそりと書く
・【カンニング竹山】<薬物に関わる芸能人に警告>「芸能界とクスリ」と短絡的に結び付けた声に「一般の人のほうが捕まっている」
・にゃんこスターの女を「一般人として見れば可愛い」と言ってきた俺だけど
・朝日新聞社員が続々証言する、ストレートニュースにも「角度をつける」特異体質 ネット「一般にはそれをフェイクニュースと言う
・一般人のほとんどが整形しない理由「親の顔に傷をつけたくないから」←表では皆こう言ってるけど絶対嘘だよな?
・一般人が人を差したら即逮捕なのに、なんで警察なら差しても逮捕されないの? という裁判 言われてみれば不思議だね
・【露ラブロフ外相】「“中国への対抗”のためにも米国も関与する平 和条約が必要」とした日本側の主張に猛反発 「言語道断」
・【悲報】一般人「アイスボーン少しやったけど、生まれてこの方数分で飽きたゲームはじめてだw」
・岡本倫さん「担当からアナル責めをしなくていいんですか?と言われたが、アナルに一般性はないと思う」
・【悲報】国民の大多数である年収300万円未満の一般人、ボーナス出るのが30%、これがアベノミクスか…
・【皇室】新天皇が国内移動する際の交通機関貸し切りをやめて一般客と同乗・・・現在の皇太子さまが検討★7
・北関東の群馬とか栃木ってあまり有名人出てないし出ててもしょぼいし一般人でもさえないやつが多いよな
・【天才】スーパー中学生誕生、プログラミング言語わずか数週間で開発、U-22プログラミング・コンテスト2019
・【現代の奴隷】「犬の餌で生き延びた」家政婦の話 外国人雇用が一般化したブラジルの現代残酷物語
・研修生いらない!一般人入れろ!とか言ってた娘。ヲタ共責任持って新メンバーの話題盛り上げろよ
・【USA】ペロシ米下院議長、トランプ大統領の一般教書演説に一言も発せず反論−表情と身ぶりで
・世界から隔絶したマイナー言語しか扱えない国民が大多数を占めると言うのは為政者にとって都合の良いことだな…
・【アニメ】東映も大迷惑?『ドラゴンボール』アニソン歌手が一般人に罵詈雑言 ★3
・【東京】東京ビッグサイトで「第57回 全日本模型ホビーショー」 一般公開日は9月30日、10月1日[2017/09/29-10/01]
・一般人「ハロプロ自体死語だろ(笑) なんでこれだけアイドル飽和状態でブサイクハロプロに拘らないといけないんだよ」
・【新成人一般人気ランキング】齋藤飛鳥と佐々木琴子が、圧倒的かつ桁違いの一般人気を、明確な数字と結果で見せつける
・【米国】ゲームで負けた腹いせに偽の通報をしてSWAT隊を呼び、無関係な一般人が射殺される 当事者「僕は関係ない」★2
・【動画】「安倍政権がんばれ!偏向報道に負けるな!」デモが開催。多数の一般市民が参加
・【佐賀】「脊振ではカラスを食べる」 一般質問で発言、住民から苦情 神埼市議が謝罪
・一般女「性欲ない、行動力ない、主体性ない、何事にも興味関心薄い」 マンコってこれがデフォだけど生きてて楽しいのか?
・江田憲司「大阪地検特捜部長からのリーク」 →ある一般人はこれから刑事告訴すると宣言、マスコミは都合が悪いのかだんまり
・【芸能】カンニング竹山「一般人との握手が嫌い」告白で批判続出 「(握手を求めてくる相手が)何を触ってるか分からない」
・元警察官僚「飯塚が逮捕されないか怪我したから」(ヽ´ん`)「一般国民も怪我したら逮捕されないの?」官僚「そんな事は言ってない」
23:32:45 up 12 days, 36 min, 2 users, load average: 8.51, 8.81, 10.23
in 0.78339886665344 sec
@0.027423858642578@0b7 on 012513
|