関数型言語に必ずくっついてるこれ
いらんでしょ?匿名クラスで充分でしょ
探検
クロージャって何がいいの? [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2014/11/08(土) 13:11:47.84ID:6V2MLUHb314デフォルトの名無しさん
2014/12/19(金) 00:07:27.38ID:lMWP4GlC >>313
おおっ!わざわざどうも!
SMLとOCamlの関係だからこういう似たような感じになるのかな?
それともループを再帰に置き換えたらどうせどの言語でもこんな感じかな?
それにしても関数型言語なるものを知るにつれて思うのは、
再帰についてはすがすがしいが、
それ以外についてはタイプ量が増えがちってこと。
ハッシュテーブルひとつ準備するのにもウダウダ。
関数型どうのというより、個別の言語によるのかもしれないけど…。
おおっ!わざわざどうも!
SMLとOCamlの関係だからこういう似たような感じになるのかな?
それともループを再帰に置き換えたらどうせどの言語でもこんな感じかな?
それにしても関数型言語なるものを知るにつれて思うのは、
再帰についてはすがすがしいが、
それ以外についてはタイプ量が増えがちってこと。
ハッシュテーブルひとつ準備するのにもウダウダ。
関数型どうのというより、個別の言語によるのかもしれないけど…。
315デフォルトの名無しさん
2014/12/20(土) 00:24:39.20ID:0cpPf2uS >>314
>SMLとOCamlの関係だからこういう似たような感じになるのかな?
SML も OCaml も同じML族の一員ですから、そんな感じになるのも不思議じゃないと思いますね
>それともループを再帰に置き換えたらどうせどの言語でもこんな感じかな?
SML 以外の関数型言語は触った程度のレベルなので、以下はあくまで私見です:
・Lisp でも似た感じの再帰になる
ただし Lisp は TCO が保証されていないから、一般的な反復処理であれば
loop や while マクロ(または、その相当品)で手続き的なループで書く
・Scheme は TCO が言語仕様で保証されているので、普通は再帰で書く(>>302)
また継続(call/cc)があるので、loop や while の相当品を関数として自前で定義することも可能
・Haskell の場合、初めのうちは(ML や Scheme と同様に)再帰で書く
ただし Haskell だと文字列は文字型のリストであり、標準ライブラリの unfoldl を使う事を学ぶようになる
・関数プログラミングの楽しみ
http://www.amazon.co.jp//dp/4274068056
第3章「おりがみプログラミング」で詳しく解説されています
ということで Haskell の定義を参考にして、SML でも関数 unfoldl で再帰を抽象化したコードを書きました:
http://ideone.com/o5JM86
ここで unfold とは、よく知られている fold の双対な概念です
(fold は、Ruby だと inject、Lisp や JavaScript では reduce と呼ばれています)
fold xs が「あるリスト xs を畳んだ値 y」を返すのに対し、
unfold y は「ある値 y を広げたリスト xs」を返します
なお、「畳む/広げる」という言葉よりも「分解する(destruct)/組立てる(construct)」のほうが直感的かもしれません
(* 長いので、続く *)
>SMLとOCamlの関係だからこういう似たような感じになるのかな?
SML も OCaml も同じML族の一員ですから、そんな感じになるのも不思議じゃないと思いますね
>それともループを再帰に置き換えたらどうせどの言語でもこんな感じかな?
SML 以外の関数型言語は触った程度のレベルなので、以下はあくまで私見です:
・Lisp でも似た感じの再帰になる
ただし Lisp は TCO が保証されていないから、一般的な反復処理であれば
loop や while マクロ(または、その相当品)で手続き的なループで書く
・Scheme は TCO が言語仕様で保証されているので、普通は再帰で書く(>>302)
また継続(call/cc)があるので、loop や while の相当品を関数として自前で定義することも可能
・Haskell の場合、初めのうちは(ML や Scheme と同様に)再帰で書く
ただし Haskell だと文字列は文字型のリストであり、標準ライブラリの unfoldl を使う事を学ぶようになる
・関数プログラミングの楽しみ
http://www.amazon.co.jp//dp/4274068056
第3章「おりがみプログラミング」で詳しく解説されています
ということで Haskell の定義を参考にして、SML でも関数 unfoldl で再帰を抽象化したコードを書きました:
http://ideone.com/o5JM86
ここで unfold とは、よく知られている fold の双対な概念です
(fold は、Ruby だと inject、Lisp や JavaScript では reduce と呼ばれています)
fold xs が「あるリスト xs を畳んだ値 y」を返すのに対し、
unfold y は「ある値 y を広げたリスト xs」を返します
なお、「畳む/広げる」という言葉よりも「分解する(destruct)/組立てる(construct)」のほうが直感的かもしれません
(* 長いので、続く *)
316デフォルトの名無しさん
2014/12/20(土) 00:32:09.09ID:0cpPf2uS (* >>315 の続き *)
なお、map や filter といった高階関数を一般化したものが fold であることは
よく知られていますが、ここでリストを代数(群)に見立てた圏論の視点で再構成すると:
・fold を(更に)一般化したものがカタモルフィズム(catamorphism)である
・unfold を(更に)一般化したものがアナモルフィズム(anamorphism)である
という、本質的な形でリスト処理を定義できるようになります
(モナドとは関連しない)圏論を応用したプログラミングについては、以下のプレゼンがお薦めです
・Introduction to Categorical Programming (Revised)
http://www.slideshare.net/sakai/introduction-to-categorical-programming-revised
p.18 の図式を使った「圏論でのリスト型の定義」が直感的です
詳細については、以下の記事で紹介されている論文(英語)が分かりやすかったです
・Haskellと圏論を学んできて、そのまとめとしてちょうどよい論文を見つけたのでメモ。
https://plus.google.com/+OsamuNagano/posts/7cPfAQ145Yi
>それにしても関数型言語なるものを知るにつれて思うのは、....
ML や Haskell は静的型付けによる安全性と高速化を主眼に設計された言語ですから、
Ruby や Python といったスクリプト言語の置き換えには成り得ないと考えます
これに関しては、以前に別スレ「LLにおける関数型プログラミング」で説明しています
http://peace.2ch.net/test/read.cgi/tech/1345123070/28
また ML や Haskell の強力な型推論は、データ型に関する矛盾(=バグ)が存在しないことを(実行の前に)証明しますが、
動かしては書き直す(いわゆるトライ&エラー)が一般的なスクリプトプログラミングには不向きだと考えます
(* これで終わり *)
なお、map や filter といった高階関数を一般化したものが fold であることは
よく知られていますが、ここでリストを代数(群)に見立てた圏論の視点で再構成すると:
・fold を(更に)一般化したものがカタモルフィズム(catamorphism)である
・unfold を(更に)一般化したものがアナモルフィズム(anamorphism)である
という、本質的な形でリスト処理を定義できるようになります
(モナドとは関連しない)圏論を応用したプログラミングについては、以下のプレゼンがお薦めです
・Introduction to Categorical Programming (Revised)
http://www.slideshare.net/sakai/introduction-to-categorical-programming-revised
p.18 の図式を使った「圏論でのリスト型の定義」が直感的です
詳細については、以下の記事で紹介されている論文(英語)が分かりやすかったです
・Haskellと圏論を学んできて、そのまとめとしてちょうどよい論文を見つけたのでメモ。
https://plus.google.com/+OsamuNagano/posts/7cPfAQ145Yi
>それにしても関数型言語なるものを知るにつれて思うのは、....
ML や Haskell は静的型付けによる安全性と高速化を主眼に設計された言語ですから、
Ruby や Python といったスクリプト言語の置き換えには成り得ないと考えます
これに関しては、以前に別スレ「LLにおける関数型プログラミング」で説明しています
http://peace.2ch.net/test/read.cgi/tech/1345123070/28
また ML や Haskell の強力な型推論は、データ型に関する矛盾(=バグ)が存在しないことを(実行の前に)証明しますが、
動かしては書き直す(いわゆるトライ&エラー)が一般的なスクリプトプログラミングには不向きだと考えます
(* これで終わり *)
317デフォルトの名無しさん
2014/12/20(土) 07:17:42.63ID:tzPxF8Oh 長い
3行でまとめろ
3行でまとめろ
318デフォルトの名無しさん
2014/12/20(土) 12:12:13.43ID:PEBuGla8 珍しく普通に相手にしてもらって
うれしくてたまらない
オレオレクロージャくんであった
うれしくてたまらない
オレオレクロージャくんであった
319デフォルトの名無しさん
2014/12/20(土) 16:08:48.96ID:5dXZUu33 >>315-316
> Lisp は TCO が保証されていないから
TCOが保証されての末尾再帰。何がすがすがしいって、これですよね。
これがあるから書いていける。
保証なしで気軽に再帰なんかしてもスタックオーバーフローでげんなりだし。
> Haskell だと文字列は文字型のリストであり、標準ライブラリの unfoldl を
おったまげですね。初めてunfoldなるもんを知りました。
Rubyでinject、OCamlでfold_left/fold_rightは馴染みがあったんですが。
何かHaskellって…グイグイ来てますよね!(小学生並みの感想)。
> cata, ana, 圏論, 圏論でのリスト型の定義
リンク先拝見しましたが現時点でどうも1ミリも理解できていません。半笑いです。
> http://ideone.com/o5JM86
ありがとうございます。よく考えると37行目の「 ^ output」が不要にも見えますね。
> Lisp は TCO が保証されていないから
TCOが保証されての末尾再帰。何がすがすがしいって、これですよね。
これがあるから書いていける。
保証なしで気軽に再帰なんかしてもスタックオーバーフローでげんなりだし。
> Haskell だと文字列は文字型のリストであり、標準ライブラリの unfoldl を
おったまげですね。初めてunfoldなるもんを知りました。
Rubyでinject、OCamlでfold_left/fold_rightは馴染みがあったんですが。
何かHaskellって…グイグイ来てますよね!(小学生並みの感想)。
> cata, ana, 圏論, 圏論でのリスト型の定義
リンク先拝見しましたが現時点でどうも1ミリも理解できていません。半笑いです。
> http://ideone.com/o5JM86
ありがとうございます。よく考えると37行目の「 ^ output」が不要にも見えますね。
320デフォルトの名無しさん
2014/12/20(土) 16:23:01.32ID:a9XjC0LN 源クロウジャ義経
321デフォルトの名無しさん
2014/12/20(土) 19:01:20.98ID:tzPxF8Oh >>318
分かりやすいですー
分かりやすいですー
322デフォルトの名無しさん
2014/12/21(日) 00:04:04.16ID:YWufr8fT >>319
>よく考えると37行目の「 ^ output」が不要にも見えますね。
バグ指摘ありがとうございます、変数 output そのものが不要でした
対策を以下へ反映し、ついでに Ruby と Python でも unfold を使って書いてみました
・Standard ML
http://ideone.com/3L6yJ0
・Ruby
http://ideone.com/4OzC0s
・Python
http://ideone.com/8TouzI
>おったまげですね。初めてunfoldなるもんを知りました。
「unfold は fold の双対な概念」であることを知れば、応用範囲は広がります
今回は文字列の unfold でしたが、リスト/配列/辞書/集合/スタック/キューといった
「コレクション・オブジェクトにおける fold/unfold」を考えることから始めませう
>よく考えると37行目の「 ^ output」が不要にも見えますね。
バグ指摘ありがとうございます、変数 output そのものが不要でした
対策を以下へ反映し、ついでに Ruby と Python でも unfold を使って書いてみました
・Standard ML
http://ideone.com/3L6yJ0
・Ruby
http://ideone.com/4OzC0s
・Python
http://ideone.com/8TouzI
>おったまげですね。初めてunfoldなるもんを知りました。
「unfold は fold の双対な概念」であることを知れば、応用範囲は広がります
今回は文字列の unfold でしたが、リスト/配列/辞書/集合/スタック/キューといった
「コレクション・オブジェクトにおける fold/unfold」を考えることから始めませう
323デフォルトの名無しさん
2014/12/21(日) 09:15:25.48ID:KrmABo99324デフォルトの名無しさん
2014/12/21(日) 16:48:41.14ID:MvQSKDIW この話題クロージャとか特に関係なく、Pythonの無名関数には文を書けず式しか書けないという単純な事実の指摘でOK?
関数型プログラミングのラムダとしては困らないが、手続き型言語における無名関数としては不便だろうな
自分はPythonを使わないので、Pythonでの「普通の」プログラミングスタイルがどっちなのかは知らん
関数型プログラミングのラムダとしては困らないが、手続き型言語における無名関数としては不便だろうな
自分はPythonを使わないので、Pythonでの「普通の」プログラミングスタイルがどっちなのかは知らん
325デフォルトの名無しさん
2014/12/21(日) 17:05:17.75ID:MvQSKDIW Hackで適当に書いてみたら本体は一行だった。PHPの緩さにラムダ加わるの最強
$strings = array_map($n ==> array_reduce(str_split($n), ($s, $d) ==> $s . $digitNames[$d]), $numbers);
$strings = array_map($n ==> array_reduce(str_split($n), ($s, $d) ==> $s . $digitNames[$d]), $numbers);
326デフォルトの名無しさん
2014/12/21(日) 17:15:45.30ID:KrmABo99 そんなので良ければPythonでも一行
strings = [''.join(digitNames[x] for x in str(n)) for n in numbers]
strings = [''.join(digitNames[x] for x in str(n)) for n in numbers]
327デフォルトの名無しさん
2014/12/21(日) 17:21:26.20ID:MvQSKDIW あれ、それdigitNames[x]のxに文字列で渡ると思うけど、Pythonも勝手に数値に変換してくれるんだっけ?
整数に変換してやらないと駄目な記憶があっていちいち面倒くさいと思ってた
整数に変換してやらないと駄目な記憶があっていちいち面倒くさいと思ってた
328デフォルトの名無しさん
2014/12/21(日) 18:11:16.63ID:axFrURca digitnames = { "0": "Zero" ... } なら>>327
digitnames = { 0: "Zero" ... } なら digitNames[int(x)]になるだけだろ。
Perlなら
my @string = map{ join '', @digit_names{split //, $_} } @numbers;
Javascriptなら
var strings = numbers.map(function(number) {
return number.toString().split("").map(function(x) { return digitNames[x] }).join("");
});
Javascriptはアロー演算子が欲しいところだ。
digitnames = { 0: "Zero" ... } なら digitNames[int(x)]になるだけだろ。
Perlなら
my @string = map{ join '', @digit_names{split //, $_} } @numbers;
Javascriptなら
var strings = numbers.map(function(number) {
return number.toString().split("").map(function(x) { return digitNames[x] }).join("");
});
Javascriptはアロー演算子が欲しいところだ。
329デフォルトの名無しさん
2014/12/21(日) 18:21:39.18ID:MvQSKDIW 最強言ったから気に食わなかったならスマンカッタ
PHPの緩さは、こういうのが動くところ。>>325でそのまま動く
$digitNames = ['Zero','One','Two','Three','Four','Five','Six','Seven','Eight','Nine','.'=>'Point','-'=>'Minus'];
$numbers = [1.234, -5.4321];
PHPの緩さは、こういうのが動くところ。>>325でそのまま動く
$digitNames = ['Zero','One','Two','Three','Four','Five','Six','Seven','Eight','Nine','.'=>'Point','-'=>'Minus'];
$numbers = [1.234, -5.4321];
330デフォルトの名無しさん
2014/12/21(日) 23:04:35.55ID:YWufr8fT >>323
>>322 と比較すると:
・わざわざジェネレータで「組立てた」シーケンスを
reduce で「畳み込んで」いて、二重のループになっているから処理効率(=性能)が悪く、
なおかつ reduce へ渡すラムダ式が増えているからコードも複雑化してしまっている
・そもそも「Haskell の unfold 定義」に従って関数定義していないから
その関数の命名 unfold は不適切であり、別の名前を考案すべき
念の為に「Haskell の unfold 定義」を以下に示す(ただし末尾再帰ではなく一般再帰):
unfold :: (B -> Maybe (A, B)) -> B -> [A]
unfold f u = case f u of
Nothing -> []
Just (x, v) -> x : (unfold f v)
この「Haskell の unfold 定義」に従った unfold の Python 実装を以下に書いた:
http://ideone.com/vpTBlR
・__unfoldl_string_rec__:一般再帰による実装(>>322 と同じ)
・__unfoldl_string_while__:while 文と破壊的代入を使った手続き型実装
あわせて Ruby の実装コードも更新した:
http://ideone.com/9x6s0h
コードの要点を示す:
・Python のジェネレータを Ruby では外部イテレータ Enumerator と呼ぶが、
(Ruby 1.9 以降のメソッド定義マナーに従い)ブロックが渡されていない場合には
(組込みメソッド Object#to_enum を使って)外部イテレータを返すようにした
・3種類のメソッド定義を示した
・String#__unfoldl_rec__:一般再帰による実装(>>322 と同じ)
・String#__unfoldl_until__:until 文と破壊的代入を使った手続き型実装
・String#__unfoldl_loop__:メソッド loop を使った参照透明性のある関数型実装(>>264)
最後に、Ruby と同様な「Haskell の unfold 定義」に従った
Python のジェネレータ実装については、>>323 への宿題としておく
(ML や Haskell といった静的型付け関数型言語に慣れていないと、難しいかもしれないが....)
>>322 と比較すると:
・わざわざジェネレータで「組立てた」シーケンスを
reduce で「畳み込んで」いて、二重のループになっているから処理効率(=性能)が悪く、
なおかつ reduce へ渡すラムダ式が増えているからコードも複雑化してしまっている
・そもそも「Haskell の unfold 定義」に従って関数定義していないから
その関数の命名 unfold は不適切であり、別の名前を考案すべき
念の為に「Haskell の unfold 定義」を以下に示す(ただし末尾再帰ではなく一般再帰):
unfold :: (B -> Maybe (A, B)) -> B -> [A]
unfold f u = case f u of
Nothing -> []
Just (x, v) -> x : (unfold f v)
この「Haskell の unfold 定義」に従った unfold の Python 実装を以下に書いた:
http://ideone.com/vpTBlR
・__unfoldl_string_rec__:一般再帰による実装(>>322 と同じ)
・__unfoldl_string_while__:while 文と破壊的代入を使った手続き型実装
あわせて Ruby の実装コードも更新した:
http://ideone.com/9x6s0h
コードの要点を示す:
・Python のジェネレータを Ruby では外部イテレータ Enumerator と呼ぶが、
(Ruby 1.9 以降のメソッド定義マナーに従い)ブロックが渡されていない場合には
(組込みメソッド Object#to_enum を使って)外部イテレータを返すようにした
・3種類のメソッド定義を示した
・String#__unfoldl_rec__:一般再帰による実装(>>322 と同じ)
・String#__unfoldl_until__:until 文と破壊的代入を使った手続き型実装
・String#__unfoldl_loop__:メソッド loop を使った参照透明性のある関数型実装(>>264)
最後に、Ruby と同様な「Haskell の unfold 定義」に従った
Python のジェネレータ実装については、>>323 への宿題としておく
(ML や Haskell といった静的型付け関数型言語に慣れていないと、難しいかもしれないが....)
331デフォルトの名無しさん
2014/12/22(月) 08:52:28.54ID:6avCYBJ9 Pythonの場合リストを返したかったら list(unfold(f, x)) で良くね?
毎回 s += a 等やって組み立てるよりも速いぞ
毎回 s += a 等やって組み立てるよりも速いぞ
332デフォルトの名無しさん
2014/12/22(月) 09:03:18.85ID:6avCYBJ9 あ、もしかしてunfoldlじゃないからダメって言ってんの?
unfoldには unfoldr と unfoldl の二種類あって、HaskellではPreludeにあるのはunfoldrだけだぞ
unfoldには unfoldr と unfoldl の二種類あって、HaskellではPreludeにあるのはunfoldrだけだぞ
333デフォルトの名無しさん
2014/12/22(月) 09:04:46.38ID:6avCYBJ9 ちなみに>>330が自信満々に貼ってる方のHaskellのunfoldの定義はunfoldrの方なw
334デフォルトの名無しさん
2014/12/22(月) 09:07:58.19ID:ZCDWZl5G unfold :: (B -> Maybe (A, B)) -> B -> [A]
じゃないから駄目とか言っといて、なんで出してる実装はことごとく
unfold :: (B -> Maybe (A, B)) -> B -> A
なの? バカなの?
じゃないから駄目とか言っといて、なんで出してる実装はことごとく
unfold :: (B -> Maybe (A, B)) -> B -> A
なの? バカなの?
335デフォルトの名無しさん
2014/12/22(月) 14:26:58.64ID:51sTiTTJ またオレオレ定義君がやらかしちゃったかー
336デフォルトの名無しさん
2014/12/22(月) 21:08:27.40ID:8h2AGQmm cにクロージャくれよっておもってたけど
今ならgoがあるんだよな
今ならgoがあるんだよな
337デフォルトの名無しさん
2014/12/22(月) 21:10:47.28ID:VRBNRD9f C++使ったら?スコープ抜けた際どうなるか、必要ならコピーを持たせよう、とかスマポにするかーとか、考える必要はあるけど
338デフォルトの名無しさん
2014/12/22(月) 21:16:46.96ID:6skO2mFq >>336
clangならblocksが使えるんじゃないかしら
clangならblocksが使えるんじゃないかしら
339デフォルトの名無しさん
2014/12/23(火) 06:28:08.32ID:pszL50YR ほー objc じゃなくても使えるのか。
まあ objc に c のソースだけ食わせて使ってもいいんだけど。
まあ objc に c のソースだけ食わせて使ってもいいんだけど。
340デフォルトの名無しさん
2014/12/23(火) 11:28:17.27ID:St4HMSPr boost lambdaで怖い思いしたから
c++はng
コンパイルエラーから黒魔術なコード出されてもこまる
c++はng
コンパイルエラーから黒魔術なコード出されてもこまる
341デフォルトの名無しさん
2014/12/23(火) 11:30:55.43ID:0dLhalMI そういうのはreplで対話的に書けたほうがいいな
342デフォルトの名無しさん
2014/12/23(火) 14:09:04.60ID:Og1JN7U7 このスレのおかげでクロージャの良さと
Ruby信者のキモさが分かりました
ありがとうございました
Ruby信者のキモさが分かりました
ありがとうございました
343デフォルトの名無しさん
2014/12/27(土) 00:25:14.89ID:randw1SU クロージャなんて最近の言語は大抵あるからね
次に関数型言語からパクって欲しいのはパターンマッチ
次に関数型言語からパクって欲しいのはパターンマッチ
344デフォルトの名無しさん
2014/12/29(月) 07:25:36.12ID:Br8mMuyh disると公開される
345デフォルトの名無しさん
2014/12/29(月) 16:50:56.24ID:9aAL2Pj2 まぁ別にいらないっちゃいらないな。
最近の言語はいろいろ付けすぎだわ。
もっと仕様単純でいいよ。
最近の言語はいろいろ付けすぎだわ。
もっと仕様単純でいいよ。
346デフォルトの名無しさん
2014/12/29(月) 17:19:30.86ID:LxjJzYoX パターンマッチの無い言語にパターンマッチを付けられるような言語がいい
347デフォルトの名無しさん
2014/12/29(月) 19:45:55.93ID:NKff8BVB348デフォルトの名無しさん
2014/12/30(火) 17:09:02.43ID:AU/nggqJ その万能プリプロセッサがあればいいんだけど
349デフォルトの名無しさん
2014/12/30(火) 18:06:56.67ID:mxKZGqd3 m4通すとか?
350デフォルトの名無しさん
2014/12/30(火) 18:40:21.70ID:AU/nggqJ その言語処理系を書かた言語のコードを直接書き変えるような書き方じゃなくて
その言語自体で新しい表現(パターンマッチとか)を定義出来るようにするってこと
その言語自体で新しい表現(パターンマッチとか)を定義出来るようにするってこと
351デフォルトの名無しさん
2014/12/30(火) 19:32:00.99ID:tU/2zS2Z >>346
lispおじさんだ!
lispおじさんだ!
352デフォルトの名無しさん
2014/12/30(火) 20:40:47.63ID:LKC757rT lispでマクロ使えばおk
353デフォルトの名無しさん
2014/12/31(水) 23:19:03.80ID:tqgvohnx >>350
たぶんschemeにドハマリするタイプ
たぶんschemeにドハマリするタイプ
354デフォルトの名無しさん
2015/01/01(木) 00:15:11.77ID:6s4ScpeL on lispとかlet over lambdaがあるcommon lispの方がいいんじゃね
355デフォルトの名無しさん
2015/01/01(木) 08:49:44.48ID:Vz2QaCIS あなほりマクロ怖い
356デフォルトの名無しさん
2015/01/01(木) 19:26:59.51ID:LWrX8qsS やっぱりpythonとかhaskellのコードと比べると
専用の構文があった方がスッキリ書ける
でもそうすると自由度が無くなってマクロがうまく使えないジレンマ
専用の構文があった方がスッキリ書ける
でもそうすると自由度が無くなってマクロがうまく使えないジレンマ
357デフォルトの名無しさん
2015/01/01(木) 19:31:53.89ID:LWrX8qsS 一応リーダマクロを使えば解決するんだけど結局使わなくなる
358デフォルトの名無しさん
2015/01/02(金) 09:58:20.63ID:ie8IusfS lispおじさんのせいで
すっかりマクロ談義スレになったな
すっかりマクロ談義スレになったな
359デフォルトの名無しさん
2015/01/02(金) 10:14:10.05ID:PL75YfkA 真のクロージャとマクロ、どっちがマシか難しいところだな
360デフォルトの名無しさん
2015/01/02(金) 11:28:56.61ID:Ur5QsT6D 二つのいいところを組み合わせたものが最強ではないだろうか?
つまりマクロージャー
つまりマクロージャー
361デフォルトの名無しさん
2015/01/02(金) 12:10:26.52ID:ie8IusfS マクロにコンテクストが付いて回るclの事だよねそれ
362デフォルトの名無しさん
2015/01/02(金) 15:30:32.04ID:/upm+g4t マクロとクロージャを組み合わせればOOPも継続も後から付けられる
363デフォルトの名無しさん
2015/01/02(金) 15:37:48.79ID:Ur5QsT6D いろんなことができる。そうマクロージャならね!
364デフォルトの名無しさん
2015/01/02(金) 20:00:41.84ID:ZuY3pBgY365デフォルトの名無しさん
2015/01/02(金) 20:28:34.80ID:UWr+Udi0 onlispでは継続を表わすクロージャを引数で渡してそれをマクロで包んでる
これだと使う側が末尾呼出的に書かないといけない縛りがある
cl-contは式をwithマクロで包んでその式をcodewalkしてcps変換してる
これだと使う側が末尾呼出的に書かないといけない縛りがある
cl-contは式をwithマクロで包んでその式をcodewalkしてcps変換してる
366デフォルトの名無しさん
2015/01/02(金) 21:04:50.09ID:ZuY3pBgY ありがとうございます。On Lisp 読んでみます。
3671
2015/01/09(金) 13:33:15.35ID:3m5OEfmN そもそも関数が一級オブジェクトである必要があるのかどうか疑問が出てきました
ifelse( aaa, xxx,
ifelse( bbb, yyy,
ifelse( ccc, zzz,
iii )))
↑死ね
IDE使えってことなんでしょうけど認知に負荷をかける言語仕様は間違ってると思うんですよね
これよりはメソッドチェーンの方がかなりスマートだと思う
foo(aaa){xxx}.bar(bbb){yyyy}.baz(ccc){zzz}
ifelse( aaa, xxx,
ifelse( bbb, yyy,
ifelse( ccc, zzz,
iii )))
↑死ね
IDE使えってことなんでしょうけど認知に負荷をかける言語仕様は間違ってると思うんですよね
これよりはメソッドチェーンの方がかなりスマートだと思う
foo(aaa){xxx}.bar(bbb){yyyy}.baz(ccc){zzz}
368デフォルトの名無しさん
2015/01/11(日) 21:16:33.98ID:8HLn7hr5 それだと全てのメソッドで条件分岐を想定した実装にしなくちゃいけなくなるのでは
369デフォルトの名無しさん
2015/01/16(金) 01:40:03.14ID:U7RTYgR7 Pythonはパターンマッチ以前にSwichtすらない
370デフォルトの名無しさん
2015/01/16(金) 08:39:36.86ID:oLGQ6wLb >>369
そんなもんがある言語を見たことないが
そんなもんがある言語を見たことないが
371デフォルトの名無しさん
2015/01/16(金) 23:23:44.50ID:obgM8cFp なんかドイツ語?みたいな切り方だな
372デフォルトの名無しさん
2015/01/21(水) 16:33:15.48ID:Out9u5nx ゲルマンおじさんこわい!
373デフォルトの名無しさん
2015/01/22(木) 01:37:45.45ID:8pwMw7VT スウィヒトとか読むの?ドイツ語ってよくわからんタイミングで濁るイメージあ?からジットとかかな
374デフォルトの名無しさん
2015/01/22(木) 08:08:05.98ID:VatMjg6z スヴィヒトだな、あえてカタカナを当てれば
375デフォルトの名無しさん
2015/01/24(土) 00:56:47.04ID:hSO7J5Oj 中二病みたい
376デフォルトの名無しさん
2015/01/27(火) 21:37:55.87ID:x1TLH4fz ここまでnonlocalなし
377デフォルトの名無しさん
2016/01/10(日) 19:01:54.47ID:sdj7zt3O Objective-Cのblocksが便利だというからいろいろ読んでみたが
使い道がよーわからん。他言語のクロージャやラムダだということで
他言語のクロージャやラムダについて読んでたらもっと混迷が深まった。
使い道がよーわからん。他言語のクロージャやラムダだということで
他言語のクロージャやラムダについて読んでたらもっと混迷が深まった。
378デフォルトの名無しさん
2016/03/29(火) 09:21:36.23ID:/c8bAcK4 サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ
https://www.youtube.com/watch?v=NDq1QoJY0nY宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート
https://www.youtube.com/watch?v=NDq1QoJY0nY宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート
379デフォルトの名無しさん
2016/05/01(日) 14:33:24.76ID:tKi6j9CT 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
い
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
い
380デフォルトの名無しさん
2018/06/30(土) 19:46:44.69ID:AmpLvy/F 保守
381デフォルトの名無しさん
2018/07/05(木) 02:00:11.95ID:RfoszcD2 S8R
382デフォルトの名無しさん
2018/07/19(木) 09:21:29.22ID:DyCUHSWz 関数型で参照透過性とか言ってるのに
クロージャにしたら意味ないじゃん。
やっぱりオブジェクト指向のほうが優れてるの?
クロージャにしたら意味ないじゃん。
やっぱりオブジェクト指向のほうが優れてるの?
383デフォルトの名無しさん
2018/07/19(木) 15:23:16.35ID:n84GXL2z ラムダ式はともかくクロージャなんて純粋な関数型では使わないだろう
384デフォルトの名無しさん
2018/08/03(金) 08:55:18.28ID:4j7d3TQF 関数型ではクロージャーは当たり前
というより関数とクロージャーに意味論的な違いはない
特定のパターンの書き方の関数をそう呼んでるだけ
というより関数とクロージャーに意味論的な違いはない
特定のパターンの書き方の関数をそう呼んでるだけ
385デフォルトの名無しさん
2018/08/03(金) 14:55:46.25ID:fAsZ4eFv >>384
ラムダ式と混同してる?
ラムダ式と混同してる?
386デフォルトの名無しさん
2018/08/03(金) 20:20:49.90ID:uYN9BNxM387デフォルトの名無しさん
2018/08/04(土) 19:50:14.71ID:47wZhJf+ クロージャとラムダを混同してないかって事じゃね?
388デフォルトの名無しさん
2018/08/04(土) 20:43:06.82ID:GiulTy4Z なんでじゃねじゃね言い合うのか
なぜ本人同士が出てきてやりあわないのか
なぜ本人同士が出てきてやりあわないのか
389デフォルトの名無しさん
2018/08/05(日) 00:06:57.49ID:79cO6f6/390デフォルトの名無しさん
2018/08/05(日) 00:35:34.24ID:GRCljFf8 お前はさながらコミュ症と称されるくちだなw
391デフォルトの名無しさん
2018/08/05(日) 19:05:22.36ID:2n69scci これはひどい
392デフォルトの名無しさん
2018/08/23(木) 08:46:43.71ID:NPcuqlt3 苦労じゃー
ら無駄
ら無駄
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 [ぐれ★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★3 [BFU★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★2 [BFU★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 中国高官と話す外務省局長の表情、やばい ★2 [175344491]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 高市早苗政権「経済的威圧をしてくる国はリスク」 トランプぴょんぴょん政権さん…… [175344491]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 偏差値35大臣「すぐに経済的威圧するところへの依存はリスク」 [834922174]
