2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

関数型言語一般

1 :デフォルトの名無しさん:2017/04/01(土) 08:12:00.61 ID:Ylmlk/tQ.net
関数型言語について。
言語同士の比較、おすすめ、不満点など。

106 :デフォルトの名無しさん:2019/10/07(月) 21:38:44.34 ID:gq2Iy46j.net
引数じゃねえな。その高階関数の値域が限定されていれば、だ。

107 :デフォルトの名無しさん:2019/10/07(月) 21:41:21.94 ID:fVAFOrwQ.net
>>100は遅延評価がIOをどう効率的に解決するかが分からないという事。

あと遅延評価より「手が空いている時に先に取得/計算しておく」
という仕組みが最強だろうという考えもあって書いた。
そこまで考えると遅延評価なんて何がうれしいのか分からない

108 :デフォルトの名無しさん:2019/10/07(月) 21:43:08.98 ID:gq2Iy46j.net
>>105
揃っているかどうかは(コンパイラがチェックしてくれるだろうから)関係ない。
その「関数ポインタ1」や「関数ポインタ2」をあらかじめ全部用意しておかなきゃならんというだけ。

109 :デフォルトの名無しさん:2019/10/07(月) 21:45:00.93 ID:fVAFOrwQ.net
>>108
コンパイル時に静的に存在している関数のポインタしか扱えないということ?

110 :デフォルトの名無しさん:2019/10/07(月) 21:49:56.93 ID:gq2Iy46j.net
基本的にはそう。

111 :デフォルトの名無しさん:2019/10/07(月) 21:59:11.03 ID:fVAFOrwQ.net
>>100だけど参照透過性が必須ならDBやネットワークは扱えないか。
しかし更新されない読み取り専用のDBがあったら話は別だ。
地理・住所系DBとかでしばしばそういうのはある。
遅延評価なら必要になった最小の部分のみDBから取得する事になるだろうが、
DBはネットワーク越しになっていたりするから一度にまとめて取得した方が良い場合がある。

遅延評価による無駄な計算の回避という主張点がどうなのかという話。
さっき書いた通り関数ポインタを渡して必要な場合のみ呼び出すという事でも無駄な計算を回避できるし、
読み取り専用DBの例は必要になった値のみ作成するというアイデアが必ずしも効率的ではない事を示している。

112 :デフォルトの名無しさん:2019/10/07(月) 22:05:25.79 ID:fVAFOrwQ.net
ストレージアクセスは4KBアクセスに最適化されているし
ネットワークもある程度のサイズに最適化されている。
そういうサイズを下回るくらいの細かなアクセスは性能を向上させない。
だから1オブジェクト単位とかまとまった単位での取得は性能を劣化させない場合がある。
遅延評価は読み取り専用DB(参照透過を保証できる)に無駄に細かい単位でのアクセスをするんじゃないか?と
その思想を聞いた限りでは思ったのだけど。

113 :デフォルトの名無しさん:2019/10/07(月) 22:25:27.92 ID:fVAFOrwQ.net
これらのシステムはある程度まとめて情報を用意するというスタイルが基本になる。
・オブジェクトを使う
・オブジェクトを使わないが正格評価

しかし遅延評価はそれを避ける事を理想としているように聞こえる。
(そうでないなら遅延評価の目指すところは何?)

>>100でサブルーチンのコストの話を出したが、
特殊なクラスタで仮想的な1台のコンピューターを扱う場合、
サブルーチンが水面下でネットワーク処理をする場合がある。

そこまで考えると関連性が高い値をまとめて作成したり
少なくとも値の作成タイミングをプログラマーが制御できたほうが良い可能性がある。

114 :デフォルトの名無しさん:2019/10/07(月) 22:31:53.01 ID:fVAFOrwQ.net
>>104が言ってるのはもしかして
Javaのラムダみたいに呼び出し元のローカル変数をコールバック関数から参照できるという話?
いわゆるクロージャー?

そうか、関数ポインタだと呼び出し元のローカル変数を扱おうとした場合
それらローカル変数分も高階関数側に宣言しなきゃならない。
ところがそれらローカル変数は呼び出し箇所それぞれの事情で存在しているもので
高階関数側に宣言するのはおかしい、みたいな話か。

それでも1つ任意データへのポインタを持たせて
そのポインタからのバイナリフォーマットについて呼び出し側が留意するなら
クロージャーと同じ話になるだろうけど。

115 :デフォルトの名無しさん:2019/10/07(月) 22:37:40.18 ID:fVAFOrwQ.net
ローカル変数一覧へのポインタAと関数ポインタBを高階関数に渡して
Bを呼び出す時にAを渡して、Aの扱い方はBに任せる、
という事ならクロージャーと同じ事ができるはずだ。

116 :デフォルトの名無しさん:2019/10/07(月) 22:45:19.76 ID:gq2Iy46j.net
だからそれがC++のファンクタとか。>>82

117 :デフォルトの名無しさん:2019/10/07(月) 23:01:06.20 ID:fVAFOrwQ.net
C++のファンクタはJavaの関数型インターフェースに相当するものか

ffcallでCでもクロージャが簡単にできるみたいだ。
やはりCと関数型の差異はイミュータブルと遅延評価しかない。

118 :デフォルトの名無しさん:2019/10/08(火) 02:45:46.49 ID:oPNVlwaz.net
はいはいモナドモナド

119 :デフォルトの名無しさん:2019/10/08(火) 03:34:59.70 ID:pe44plco.net
モナドは、例えばサブルーチンとgotoは違うモナド、みたいな事?
言語側が勝手にやるモジュール化のための基本処理をモナドと言っている?

120 :デフォルトの名無しさん:2019/10/08(火) 06:02:54.26 ID:pe44plco.net
なんとなくわかった
値という概念の亜種みたいなもので、
関数型言語では「現在のプログラムの状態は?」と聞かれた時
値だけで説明できずモナドをまじえて説明するのか。

そうする事でユーザー入力みたいな純粋関数にしえないもの、つまり
「参照透過性を破壊する性質の値」をモナドとして扱う事で
一旦プログラム状態の説明としては参照透過性があるという事になるわけだ。
要するに参照透過性を破壊する値にある種のマーカーがついてて、
参照透過性を前提としたあれやこれやをする時に問題が生じそうなら
そのマーカーがついてるとこだけ注意すればいいみたいになるのだろう。

121 :デフォルトの名無しさん:2019/10/08(火) 07:53:35.37 ID:pe44plco.net
値の亜種なのはアクションだった

122 :デフォルトの名無しさん:2019/10/08(火) 08:00:43.59 ID:pe44plco.net
モナドはアクションが実装しているインターフェースみたいなもので、
”アクションをつないで行ける”という機能性を指すもの、か

123 :デフォルトの名無しさん:2019/11/10(日) 23:19:27.92 ID:GJO8oH1c.net
C/C++/C#、それとあとjavaとpythonをかじってみたいな流れで来てるんだけど幅を広げるためにちょっと関数型言語に手を出してみようかなって
ざっと見た感じすごいhaskellから入るのがいいんでしょうか

124 :デフォルトの名無しさん:2019/11/11(月) 15:23:50.19 ID:XPW+G+fy.net
すごいハスケルは型のことそんな書いてないからその辺求めるなら別のがいいかも
モナモナとかにはいいかもね

125 :デフォルトの名無しさん:2019/11/12(火) 21:44:05.88 ID:50pzLNgN.net
>>123
Haskell人気でイマイチ表に出ないけど、利用実績十分のOCamlやろうぜ。
C#やってるならF#でもいいぞ!

126 :デフォルトの名無しさん:2019/11/13(水) 00:47:58.24 ID:IXCpTxe3.net
https://www.quora.com/What-functional-programming-language-should-one-start-to-learn-functional-programming
ここなんかでもそうなんだけど関数型言語はじめの一歩ってことでRacketってのがおすすめされること多いみたいなんだよね
このスレでは名前の一回も出てきてやしないけど。もともと学習用?の側面が大きいらしい
日本語の資料ぜーんぜん無いのが辛いところだけど

127 :デフォルトの名無しさん:2019/11/13(水) 15:21:10.71 ID:fkBRfIh6.net
Haskellの表記の簡潔さを知ったらあの括弧責めは耐えられないなぁ

128 :デフォルトの名無しさん:2019/11/13(水) 15:57:46.62 ID:xHR96BPN.net
>>126
Racketの処理系ではSchemeが動くからSchemeを勉強すれば良い

>>127
> Haskellの表記の簡潔さを知ったらあの括弧責めは耐えられないなぁ

Schemeには括弧は多いがHaskellのようにやたらと色んな概念がてんこ盛りにはなっていない
Schemeは作用順の評価戦略を採用したλ-計算に最小限のデータ種別(実行時の型チェック)と最小限の命令的な代入操作(set!など)を追加しただけで
概念的には極めてコンパクトな言語だよ(Revised^6は例外としてね)

他方、Haskellは関数型のAdaと揶揄されることもあるように、委員会言語の常で取り入れられる概念は何でもかんでも取り入れて複雑極まりない言語に仕上がった
表記上は括弧がなくてオフサイド・ルール(インデンテーションによる括弧の代わり)を採用しているので見掛けだけは簡単かも知れないがな

129 :デフォルトの名無しさん:2019/11/13(水) 15:58:55.33 ID:xHR96BPN.net
>>128に大事な1行を書き忘れてた

> Racketの処理系ではSchemeが動くからSchemeを勉強すれば良い

つまりSchemeの教科書は日本語でも何冊かあるからってことです

130 :デフォルトの名無しさん:2019/11/13(水) 19:39:27.92 ID:WKyHfTcn.net
>>128
>概念がてんこ盛り
例えば?

自分としてはライブラリなんかには色々入っているけど
素の言語仕様は簡素で学習しやすい言語だと思ったけどな。

型の制約があることで却って初学者に抽象的な奥深さによる
幻惑を与えないとも思う。

131 :デフォルトの名無しさん:2019/12/08(日) 22:18:09.37 ID:FcZETuy5.net
land of lispで勉強始めたんだけどめっちゃ脳が疲れる
いやー全く未知の概念

132 :デフォルトの名無しさん:2020/01/29(水) 01:02:07.33 ID:QfgBwiCJ.net
ラムダの数だけ強くなれるよ

133 :デフォルトの名無しさん:2020/01/30(木) 21:50:33 ID:9ODqbqZ6.net
素敵!

134 :デフォルトの名無しさん:2020/02/08(土) 14:03:07 ID:B8La3jsg.net
Coconutってこのスレでいい?
ttp://coconut-lang.org/

>>111
遅延評価がアリなら、
MathematicaのSelectTuplesみたいなのを用意しなくても(つまり、Tuplesが
遅延評価してくれるのなら)、
組合せ爆発によるメモリ不足は回避出来るのかも。
ttps://resources.wolframcloud.com/FunctionRepository/resources/SelectTuples

組合せが全部メモリに載る様な「小さな」問題なら、予め全組合せを計算して、
条件とかに合わないのを弾く事も出来るけどね。

135 :デフォルトの名無しさん:2020/03/02(月) 10:36:06 ID:1prpoVxJ.net
確かにHaskellは他の言語に比べれば多くのことができるけど、
Haskellを使えるようになるためにそれらを全て理解してないと行けないかと言われたらそんなことはない

結局Haskellに限らずどんな言語でも学習する内容を取捨選択する必要があるだけであって、
Haskellが色々できることを問題と捉える必要はない。

問題なのは、学習者が取捨選択するための基準が不透明なのと、
それらを理解してないことに対してマウントとってくる輩がいることかな。

136 :デフォルトの名無しさん:2020/03/02(月) 13:38:02 ID:3UD60Ykg.net
急にどうした?
今日から学校休みか。

137 :デフォルトの名無しさん:2020/03/02(月) 17:19:34 ID:ymgAUqET.net
>>135
自己紹介乙

138 :デフォルトの名無しさん:2020/03/02(月) 17:56:18.19 ID:lNfcnDid.net
>>137
うーんこの

139 :デフォルトの名無しさん:2020/03/03(火) 07:13:05.47 ID:eRD0A7HE.net
におい

140 :デフォルトの名無しさん:2020/03/04(水) 12:40:45 ID:jjZ3D63w.net
>>137
ガイジ?

141 :デフォルトの名無しさん:2020/04/14(火) 20:26:45.06 ID:qEc7Qic7.net
『Land of Lisp』を読んでいるんですがその中で、
「純粋関数」と「副作用のある関数」を分離せよ、とあるんですが
「こうやって分離するんやで」みたいな設計方法について
書かれた本ってありますか?

142 :デフォルトの名無しさん:2020/04/14(火) 21:25:00 ID:ZKw4nFPq.net
みたことないの
非純粋関数型について書かれたものだったらどっか章さいてるかもしれんけど
副作用起こすところなるべくまとめて途中ではやらないようにするってだけな気はするが

143 :デフォルトの名無しさん:2020/04/14(火) 22:38:23 ID:/l9br6Fi.net
こんなところで教えたら自分の価値を下げるよ

144 :デフォルトの名無しさん:2020/04/15(水) 08:19:56 ID:o6eRUHF0.net
>>141
テスト駆動開発とかレガシーコード改善ガイドとかあの辺読んだ方がわかりやすいよ。

145 :141:2020/04/15(水) 19:00:19 ID:oxCAkZLq.net
みなさんありがとうございます。
>テスト駆動開発とかレガシーコード改善ガイド
読んでみます。
あと、調べてたらIOモナドというのも副作用の分離に効果がありそう?
これで思い出したのが、この前読んだSICPの画像言語の章で、
そこではPainterオブジェクトで画像出力(副作用)を包み、それを
使って関数同士を合成してました。
これも1つの副作用の分離で、IOモナドとも関係あるのかな???
うーん

146 :デフォルトの名無しさん:2020/04/15(水) 21:12:03.79 ID:ZgQ9tmqF.net
というよりハスケルではIOモナドでしか副作用できんし。
副作用を行うところを明確に分離してるって意味では合ってる

147 :デフォルトの名無しさん:2020/04/22(水) 21:45:13 ID:TQVQtNCZ.net
今ある言語の話ではなく、設計の話
配列の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が定数か変数かによって左右されてしまう

いい方法がないものか・・・

148 :デフォルトの名無しさん:2020/04/29(水) 02:46:37.58 ID:GLX6jWJt.net
前者でいいじゃん
人を最も驚かせないシンプルな仕様が良い

149 :デフォルトの名無しさん:2021/03/28(日) 15:28:12.93 ID:ujFW/mLij
週2日出社、週2日在宅の週4日勤務が最高の働き方だと提唱したい
https://www.youtube.com/watch?v=cGfllBHpC_4
週休3日制になったら給料を減らされる??そんな考えだからいつまで経っても貧乏なんだよ...
https://www.youtube.com/watch?v=UNDd5jw2O2I
サラリーマンが副業でプライベートカンパニーを設立するメリット
https://www.youtube.com/watch?v=UfDcJe8Pkew
Webマーケターに転職して、セミリタイアを実現させる方法
https://www.youtube.com/watch?v=SKdt2JqO6Vc
【朗報】「在宅勤務OK」の求人、コロナ前と比べて7 7倍に上昇!
https://www.youtube.com/watch?v=h8u7rOwNhBQ
【悲報】「会社員に戻りたい!」というフリーランス、全体の3%しかいないw
https://www.youtube.com/watch?v=M6aRdaxbKFk
【悲報】副業が解禁されても、副業を見つけられずに困窮する会社員が続出...
日頃から副業をやっておくことの重要性を再認識しよう
https://www.youtube.com/watch?v=hcbDnL1ZvrM&t=109s
1日8時間労働では健康で文化的な最低限度の生活を営むことは不可能です。1日4時間労働で良い理由
https://www.youtube.com/watch?v=DmCIPHBNRPA

150 :デフォルトの名無しさん:2021/06/25(金) 18:35:22.15 ID:y4qQHaj3.net
ラムダ型キター♪───O(≧∇≦)O────♪
https://news.tv-asahi.co.jp/news_international/articles/amp/000220462.html

151 :デフォルトの名無しさん:2021/06/26(土) 10:15:28.65 ID:YXHi9DUP.net
関数型プログラミングをサポートしている言語
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

152 :デフォルトの名無しさん:2021/12/04(土) 19:08:57.00 ID:3xPvQ6zg.net
Perl6 じゃねぇ、Raku だ!

153 :デフォルトの名無しさん:2022/03/24(木) 12:14:33.29 ID:/pwDrn23.net
Javaが抜けてるね

154 :デフォルトの名無しさん:2022/03/24(木) 13:32:45.52 ID:3HKyyccS.net
関数型プログラミングしか出来ない言語に絞って欲しい

155 :デフォルトの名無しさん:2023/03/06(月) 13:13:03.90 ID:e3R43+tj.net
( ̄ー ̄)ニヤリ

47 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★