カテゴリ
全体プログラミング scheme verilog 未分類 以前の記事
2016年 04月2016年 03月 2016年 02月 2016年 01月 2015年 12月 2015年 11月 2015年 10月 2015年 09月 2015年 08月 2015年 07月 2015年 06月 2015年 03月 お気に入りブログ
PHPで競技プログラミングメモ帳
最新のトラックバック
ライフログ
検索
タグ
racket
その他のジャンル
ブログパーツ
最新の記事
外部リンク
ファン
記事ランキング
ブログジャンル
画像一覧
|
REALM OF RACKETの7章は、Land of Lambda。韻を踏んでます、ヨウチェケラッ!
ラムダは偉大なり ラムダは偉大なり ラムダは偉大なり そういえば高階関数のことをタカシナカンスウと呼びたくなるのは私だけでしょうか? The Great Lambda The Great Lambda The Great Lambda 7章のなかで登場する関数たち。Racketeerは手続き(procedure)のことを関数(function)というらしいです。 map filter ormap andmap foldr foldl build-list apply build-list?! build-listはRacket特有の組み込み関数らしいです。 (build-list n proc) -> list? > (build-list 3 add1) '(1 2 3) > (build-list 5 sqr) '(0 1 4 9 16) > (build-list 5 sqrt) '(0 1 1.4142135623730951 1.7320508075688772 2) > (build-list 3 +) '(0 1 2) > (build-list 3 *) '(0 1 2) この関数は、range, iotaに似ていますが、初期値とステップ数を取ることができないので使いづらいです。 +, *を受け付けますが、(build-list 3 cons)とするとさすがに怒られます。 Lambda is great Lambda is great Lambda is great Lambda is great Lambda is great そういえばRacketのソースコードの中には画像の他に、「λ」を貼り付けることができます。でもClojureのfnのほうが名前が短いのでいいように思います。 (fn [x] (* x 2)) (fn (x) (* x 2))とはかけない。残念 lambdaの短縮形として、cutを紹介しました。 (lambda (x) (* x 2)) (cut * <> 2) Forumで教えてもらったのですが、Racketにはcurryという組み込み関数があって、さらに短く書くことができます。 (curry * 2) curryはいわゆるカリー化のカリーです。F#でこれを習った時は、なんて無駄機能なのだろうと思ったのですが、lambda同様、ちょっとした用で使えるようです。
by tempurature
| 2015-12-18 23:07
| scheme
| ||||||||||||||||||||||
ファン申請 |
||