[表示 : 全て 最新50 1-99 101- 201- 301- 2ch.scのread.cgiへ]
Update time : 06/18 19:36 / Filesize : 147 KB / Number-of Response : 385
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

クロージャって何がいいの?



1 名前:デフォルトの名無しさん [2014/11/08(土) 13:11:47.84 ID:6V2MLUHb.net]
関数型言語に必ずくっついてるこれ
いらんでしょ?匿名クラスで充分でしょ

331 名前:デフォルトの名無しさん mailto:sage [2014/12/21(日) 17:21:26.20 ID:MvQSKDIW.net]
あれ、それdigitNames[x]のxに文字列で渡ると思うけど、Pythonも勝手に数値に変換してくれるんだっけ?
整数に変換してやらないと駄目な記憶があっていちいち面倒くさいと思ってた

332 名前:デフォルトの名無しさん mailto:sage [2014/12/21(日) 18:11:16.63 ID:axFrURca.net]
digitnames = { "0": "Zero" ... } なら>>331
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はアロー演算子が欲しいところだ。

333 名前:デフォルトの名無しさん mailto:sage [2014/12/21(日) 18:21:39.18 ID:MvQSKDIW.net]
最強言ったから気に食わなかったならスマンカッタ

PHPの緩さは、こういうのが動くところ。>>329でそのまま動く
$digitNames = ['Zero','One','Two','Three','Four','Five','Six','Seven','Eight','Nine','.'=>'Point','-'=>'Minus'];
$numbers = [1.234, -5.4321];

334 名前:デフォルトの名無しさん mailto:sage [2014/12/21(日) 23:04:35.55 ID:YWufr8fT.net]
>>327
>>326 と比較すると:
・わざわざジェネレータで「組立てた」シーケンスを
 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 実装を以下に書いた:
  ideone.com/vpTBlR
  ・__unfoldl_string_rec__:一般再帰による実装(>>326 と同じ)
  ・__unfoldl_string_while__:while 文と破壊的代入を使った手続き型実装

あわせて Ruby の実装コードも更新した:
  ideone.com/9x6s0h
コードの要点を示す:
・Python のジェネレータを Ruby では外部イテレータ Enumerator と呼ぶが、
 (Ruby 1.9 以降のメソッド定義マナーに従い)ブロックが渡されていない場合には
 (組込みメソッド Object#to_enum を使って)外部イテレータを返すようにした
・3種類のメソッド定義を示した
 ・String#__unfoldl_rec__:一般再帰による実装(>>326 と同じ)
 ・String#__unfoldl_until__:until 文と破壊的代入を使った手続き型実装
 ・String#__unfoldl_loop__:メソッド loop を使った参照透明性のある関数型実装(>>267

最後に、Ruby と同様な「Haskell の unfold 定義」に従った
Python のジェネレータ実装については、>>327 への宿題としておく
(ML や Haskell といった静的型付け関数型言語に慣れていないと、難しいかもしれないが....)

335 名前:デフォルトの名無しさん mailto:sage [2014/12/22(月) 08:52:28.54 ID:6avCYBJ9.net]
Pythonの場合リストを返したかったら list(unfold(f, x)) で良くね?
毎回 s += a 等やって組み立てるよりも速いぞ

336 名前:デフォルトの名無しさん mailto:sage [2014/12/22(月) 09:03:18.85 ID:6avCYBJ9.net]
あ、もしかしてunfoldlじゃないからダメって言ってんの?
unfoldには unfoldr と unfoldl の二種類あって、HaskellではPreludeにあるのはunfoldrだけだぞ

337 名前:デフォルトの名無しさん mailto:sage [2014/12/22(月) 09:04:46.38 ID:6avCYBJ9.net]
ちなみに>>334が自信満々に貼ってる方のHaskellのunfoldの定義はunfoldrの方なw

338 名前:デフォルトの名無しさん mailto:sage [2014/12/22(月) 09:07:58.19 ID:ZCDWZl5G.net]
unfold :: (B -> Maybe (A, B)) -> B -> [A]
じゃないから駄目とか言っといて、なんで出してる実装はことごとく
unfold :: (B -> Maybe (A, B)) -> B -> A
なの? バカなの?

339 名前:デフォルトの名無しさん mailto:sage [2014/12/22(月) 14:26:58.64 ID:51sTiTTJ.net]
またオレオレ定義君がやらかしちゃったかー



340 名前:デフォルトの名無しさん mailto:sage [2014/12/22(月) 21:08:27.40 ID:8h2AGQmm.net]
cにクロージャくれよっておもってたけど
今ならgoがあるんだよな

341 名前:デフォルトの名無しさん mailto:sage [2014/12/22(月) 21:10:47.28 ID:VRBNRD9f.net]
C++使ったら?スコープ抜けた際どうなるか、必要ならコピーを持たせよう、とかスマポにするかーとか、考える必要はあるけど

342 名前:デフォルトの名無しさん mailto:sage [2014/12/22(月) 21:16:46.96 ID:6skO2mFq.net]
>>340
clangならblocksが使えるんじゃないかしら

343 名前:デフォルトの名無しさん mailto:sage [2014/12/23(火) 06:28:08.32 ID:pszL50YR.net]
ほー objc じゃなくても使えるのか。
まあ objc に c のソースだけ食わせて使ってもいいんだけど。

344 名前:デフォルトの名無しさん mailto:sage [2014/12/23(火) 11:28:17.27 ID:St4HMSPr.net]
boost lambdaで怖い思いしたから
c++はng
コンパイルエラーから黒魔術なコード出されてもこまる

345 名前:デフォルトの名無しさん mailto:sage [2014/12/23(火) 11:30:55.43 ID:0dLhalMI.net]
そういうのはreplで対話的に書けたほうがいいな

346 名前:デフォルトの名無しさん mailto:sage [2014/12/23(火) 14:09:04.60 ID:Og1JN7U7.net]
このスレのおかげでクロージャの良さと
Ruby信者のキモさが分かりました
ありがとうございました

347 名前:デフォルトの名無しさん mailto:sage [2014/12/27(土) 00:25:14.89 ID:randw1SU.net]
クロージャなんて最近の言語は大抵あるからね
次に関数型言語からパクって欲しいのはパターンマッチ

348 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 07:25:36.12 ID:Br8mMuyh.net]
disると公開される

349 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 16:50:56.24 ID:9aAL2Pj2.net]
まぁ別にいらないっちゃいらないな。
最近の言語はいろいろ付けすぎだわ。
もっと仕様単純でいいよ。



350 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 17:19:30.86 ID:LxjJzYoX.net]
パターンマッチの無い言語にパターンマッチを付けられるような言語がいい

351 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 19:45:55.93 ID:NKff8BVB.net]
>>350
プリプロセッサを使えば、どんな言語でも
なんだって出来るんじゃね?

352 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 17:09:02.43 ID:AU/nggqJ.net]
その万能プリプロセッサがあればいいんだけど

353 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 18:06:56.67 ID:mxKZGqd3.net]
m4通すとか?

354 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 18:40:21.70 ID:AU/nggqJ.net]
その言語処理系を書かた言語のコードを直接書き変えるような書き方じゃなくて
その言語自体で新しい表現(パターンマッチとか)を定義出来るようにするってこと

355 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 19:32:00.99 ID:tU/2zS2Z.net]
>>350
lispおじさんだ!

356 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 20:40:47.63 ID:LKC757rT.net]
lispでマクロ使えばおk

357 名前:デフォルトの名無しさん mailto:sage [2014/12/31(水) 23:19:03.80 ID:tqgvohnx.net]
>>354
たぶんschemeにドハマリするタイプ

358 名前:デフォルトの名無しさん mailto:sage [2015/01/01(木) 00:15:11.77 ID:6s4ScpeL.net]
on lispとかlet over lambdaがあるcommon lispの方がいいんじゃね

359 名前:デフォルトの名無しさん mailto:sage [2015/01/01(木) 08:49:44.48 ID:Vz2QaCIS.net]
あなほりマクロ怖い



360 名前:デフォルトの名無しさん mailto:sage [2015/01/01(木) 19:26:59.51 ID:LWrX8qsS.net]
やっぱりpythonとかhaskellのコードと比べると
専用の構文があった方がスッキリ書ける
でもそうすると自由度が無くなってマクロがうまく使えないジレンマ

361 名前:デフォルトの名無しさん mailto:sage [2015/01/01(木) 19:31:53.89 ID:LWrX8qsS.net]
一応リーダマクロを使えば解決するんだけど結局使わなくなる

362 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 09:58:20.63 ID:ie8IusfS.net]
lispおじさんのせいで
すっかりマクロ談義スレになったな

363 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 10:14:10.05 ID:PL75YfkA.net]
真のクロージャとマクロ、どっちがマシか難しいところだな

364 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 11:28:56.61 ID:Ur5QsT6D.net]
二つのいいところを組み合わせたものが最強ではないだろうか?

つまりマクロージャー

365 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 12:10:26.52 ID:ie8IusfS.net]
マクロにコンテクストが付いて回るclの事だよねそれ

366 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 15:30:32.04 ID:/upm+g4t.net]
マクロとクロージャを組み合わせればOOPも継続も後から付けられる

367 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 15:37:48.79 ID:Ur5QsT6D.net]
いろんなことができる。そうマクロージャならね!

368 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 20:00:41.84 ID:ZuY3pBgY.net]
>>366
継続渡しではないですよね?
マクロとクロージャーで継続をどう実装するか
ぱっとは思いつかなかったのでよかったら教えてください。

369 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 20:28:34.80 ID:UWr+Udi0.net]
onlispでは継続を表わすクロージャを引数で渡してそれをマクロで包んでる
これだと使う側が末尾呼出的に書かないといけない縛りがある
cl-contは式をwithマクロで包んでその式をcodewalkしてcps変換してる



370 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 21:04:50.09 ID:ZuY3pBgY.net]
ありがとうございます。On Lisp 読んでみます。

371 名前:1 mailto:sage [2015/01/09(金) 13:33:15.35 ID:3m5OEfmN.net]
そもそも関数が一級オブジェクトである必要があるのかどうか疑問が出てきました
ifelse( aaa, xxx,
ifelse( bbb, yyy,
ifelse( ccc, zzz,
      iii )))
       ↑死ね
IDE使えってことなんでしょうけど認知に負荷をかける言語仕様は間違ってると思うんですよね
これよりはメソッドチェーンの方がかなりスマートだと思う
foo(aaa){xxx}.bar(bbb){yyyy}.baz(ccc){zzz}

372 名前:デフォルトの名無しさん mailto:sage [2015/01/11(日) 21:16:33.98 ID:8HLn7hr5.net]
それだと全てのメソッドで条件分岐を想定した実装にしなくちゃいけなくなるのでは

373 名前:デフォルトの名無しさん mailto:sage [2015/01/16(金) 01:40:03.14 ID:U7RTYgR7.net]
Pythonはパターンマッチ以前にSwichtすらない

374 名前:デフォルトの名無しさん mailto:sage [2015/01/16(金) 08:39:36.86 ID:oLGQ6wLb.net]
>>373
そんなもんがある言語を見たことないが

375 名前:デフォルトの名無しさん mailto:sage [2015/01/16(金) 23:23:44.50 ID:obgM8cFp.net]
なんかドイツ語?みたいな切り方だな

376 名前:デフォルトの名無しさん mailto:sage [2015/01/21(水) 16:33:15.48 ID:Out9u5nx.net]
ゲルマンおじさんこわい!

377 名前:デフォルトの名無しさん mailto:sage [2015/01/22(木) 01:37:45.45 ID:8pwMw7VT.net]
スウィヒトとか読むの?ドイツ語ってよくわからんタイミングで濁るイメージあ?からジットとかかな

378 名前:デフォルトの名無しさん mailto:sage [2015/01/22(木) 08:08:05.98 ID:VatMjg6z.net]
スヴィヒトだな、あえてカタカナを当てれば

379 名前:デフォルトの名無しさん mailto:sage [2015/01/24(土) 00:56:47.04 ID:hSO7J5Oj.net]
中二病みたい



380 名前:デフォルトの名無しさん mailto:sage [2015/01/27(火) 21:37:55.87 ID:x1TLH4fz.net]
ここまでnonlocalなし

381 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 03:43:18.04 ID:9L/RhMYwv]
関数を返す関数を定義するときにはいる

382 名前:デフォルトの名無しさん mailto:sage [2016/01/10(日) 19:01:54.47 ID:sdj7zt3O.net]
Objective-Cのblocksが便利だというからいろいろ読んでみたが
使い道がよーわからん。他言語のクロージャやラムダだということで
他言語のクロージャやラムダについて読んでたらもっと混迷が深まった。

383 名前:デフォルトの名無しさん [2016/03/29(火) 09:21:36.23 ID:/c8bAcK4.net]
サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ
https://www.youtube.com/watch?v=NDq1QoJY0nY宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート

384 名前:デフォルトの名無しさん [2016/05/01(日) 14:33:24.76 ID:tKi6j9CT.net]
匿名通信(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的に分散され、特定のサーバーに依存しません







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<147KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef