【相談】今後の進め方とかネタとか

5 views
Skip to first unread message

valvallow

unread,
Sep 7, 2010, 6:41:41 AM9/7/10
to 9lisp
お疲れ様です。valvallowです。

最近、少しグダグダ気味なのでどうにかしたいなぁーと思っています。
グダグダしてはいますが、ネタがないわけではありません。むしろたくさんあります。

テーマや進め方について明確でなく、迷いもあり準備不足もあり・・・
いろいろ原因はあるのですが、漠然とどうにかしたいです^^;

テーマ、進め方などについて何か案はないでしょうか。。


例えば今まで以下のような提案がありました。
  • Project Euler などの問題を解いてはどうか
  • もくもく会みたいな路線を試してみてはどうか
  • 読書会的なものに戻してみてはどうか
  • Kahuaで何か作ってみてはどうか

一度部分的に取り組んだものや、今後取り組めそうなネタ。
  • マクロ
  • 継続
  • 部分適用/関数合成/カリー化
  • fixed point
  • CLOS
  • PAIPなどの本


宮崎シンヤ(shunsuk)

unread,
Sep 7, 2010, 7:35:01 AM9/7/10
to 9l...@googlegroups.com
関口宏です。
間違えました、shunsukです。


個人的には、「関数型言語」「関数プログラミング」という切り口で攻めたいです。
いまだに、なぜ関数型言語なのか?というのを感じ取っていません。
そういういう意味では、ちょっとLISPを離れて、
ClojureやScala、OCaml、F#などをやってみてもいいかもしれません。
あ。ClojureはLISP方言でしたっけ。


この辺ですね。

数理科学的バグ撲滅方法論のすすめ---目次 - 数理科学的バグ撲滅方法論のすすめ:ITpro

本物のプログラマはHaskellを使う - 本物のプログラマはHaskellを使う:ITpro


あと、この本を買って、3行で挫折しました。
なんとかしてください!

Amazon.co.jp: 関数プログラミングの楽しみ:


また、関数型にこだわらず、プログラミングの本質に迫れたらいいなあとも思います。
それがなんなのか。私に聞くのは野暮ってもんです。




valvallow

unread,
Sep 8, 2010, 5:35:23 AM9/8/10
to 9lisp
shunsukさん

こんばんわ。
さっそく反応頂いてたのに、返信が遅くなってすいません!
9LISPメールが迷惑メールフォルダに行ってました・・・

良いですね「関数型言語」「関数プログラミング」!
ですが、そういった切り口ってどういうものになるんでしょうか・・・?

「手続き型だったらこんなになっちゃうけど、関数型だとこんなにあっさりキレイに書けるよねー!」
みたいな?

>ClojureやScala、OCaml、F#などをやってみてもいいかもしれません。
この中では個人的にはClojure, F#, OCaml あたりは興味ありです。
Haskellにも興味あります。Clojureは少し触ってます。

Lisp方言の中ではClojureもそうですが、Schemeも文化的には関数型プログラミングです。
関数合成や部分適用なんかもsrfiで取り入れられています。
Gauche(scheme)なんかはHaskell由来らしい関数も多いです。

「関数プログラミングの楽しみ」は私も先日書店で見かけたので手に取ってみましたが、さっぱりわかりませんでした(笑)


関数型についてやっていく、というのには良いなーと思います。
繰り返しになりますが、どういう内容でやっていけば良いかあまりイメージがわきません。。


2010年9月7日20:35 宮崎シンヤ(shunsuk) <techni...@gmail.com>:

宮崎シンヤ(shunsuk)

unread,
Sep 8, 2010, 7:22:37 AM9/8/10
to 9l...@googlegroups.com
おつかれちゃんです。
shunsukです。


関数合成や部分適用なんかもsrfiで取り入れられています。

やっぱり、あるんですね。


私は関数合成がよくわかっていなくて、
理屈ではわかるんですが、体感していないというか。
そのへんを何とかしたいなあと。

部分適用やカリー化も、頭で理解して、「だから何?」という感じでしたが、
最近ようやくありがたみを感じることができるようになってきました。
そういう意味では、遅延評価もメリットを体感していないです。

関数型言語とオブジェクト指向についても、
いまだに相容れないのではないかと疑っています。

言語仕様ではなく、そのへんの考え方を学べたらなあと。
その概念を学ぶのに最適な言語があれば、その都度さわってみるといいでしょうね。


で、進め方ですが。
エクストリームググリング的なのでもいいかもしれません。
与えられたキーワードをもとに、各自でググる。
それをもとに、ディスカッション。
書いてみよう!という課題がでてきたら、書く。

関数プログラミングについての参考書や参考文献があれば、
エクストリームググリングの中で見つかると思います。


グダグダ感が払拭できるかは未知数ですが^^

valvallow

unread,
Sep 8, 2010, 8:40:02 AM9/8/10
to 9l...@googlegroups.com
お疲れ様です。
valvallowです。

>関数合成や部分適用

ありますね。
確認したら部分適用はsrfi-26(srfi:公式のライブラリ的なもの)にcut, cuteがありますが
composeやcomplementのような関数合成手続きはsrfiでは提供されていないようでした。
gaucheなどでは両方とも提供されています。

個人的には部分適用も関数合成も結構使う機会が多いです。
特に部分適用は使用頻度が高いです。

これはschemeがlisp-1(関数と変数の名前空間が同じ)であることも影響しているかなぁ
と思います。
schemeを書く場合、名前の消費に敏感になるところがあったりするせいか
無名関数やローカル関数をバリバリ使います。

その際、(lambda (a b c) body ...)で書くとlambdaだらけで煩わしく、見通しも悪くなります。
そういう時、cutなんかの部分適用は重宝しています。

例えばですが、fizzbuzzで言うとこんなコードで

(use srfi-1)
(fold-right (lambda (e acc)
              (cons (cond ((zero? (modulo e 15)) "fizzbuzz")
                          ((zero? (modulo e 5)) "buzz")
                          ((zero? (modulo e 3)) "fizz")
                          (else e)) acc))
            '() (iota 100 1))

(zero? (modulo e ... がうざいのでcut(部分適用)とcompose(compose)を使って

(fold-right (lambda (e acc)
              (let ((p (compose zero? (cut modulo e <>))))
                (cons (cond ((p 15) "fizzbuzz")
                            ((p 5) "buzz")
                            ((p 3) "fizz")
                            (else e)) acc)))
            '() (iota 100 1))

cutは
(cut list 1 2 <> <> <> 6 7) <=> (lambda (san yon go)(list 1 2 san yon go 6 7))
というようなものです。
テンプレートの穴埋めみたいで、わかりやすいと思います。


遅延評価の方は私もあまりピンと来ません。
便利なことがあるのは確かですが、あまり気づくことがありません。。

その点では、常に遅延評価なHaskellや、やたら遅延ストリームばっかり使うClojure
なんかをやり込むと新しいパラダイムを得ることができるのかもしれないなぁと思っています。

関数型とオブジェクト指向については、C#のλ式やLINQだったり、
関数型なSchemeにCLOSライクなオブジェクトシステムを組み込んであるGauche
なんかを見ると相性が良いんじゃないかと思っています。


エクストリームググリング!!(笑)
いいですね、それ!
事前にメーリングリストでトピックを上げとくとうまくいきそうですね!


2010年9月8日20:22 宮崎シンヤ(shunsuk) <techni...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages