現在いささか苦戦中なので、C++のコードをポストするまでのあいだに気がついたことを、めも。Haskellで書いたとき、関数を評価するコードではまったことはすでに書きましたが、苦戦したのがもう一カ所。入力されたプログラムをパースするところ。具体的にはread_from、read_from'、read_listの各関数のところ。ここだけやたらと手続き的になっています。少なくともそう感じながら書いていました。同時のここは、関数型言語でよく使われる再帰呼び出しをともなうコードにもなっています。慣れている人でしたらどうということはないのかもしれませんが、このふたつの折り合いをつけるのに苦戦してしまいました(repl関数も手続き的かつ再帰呼び出しですが、これは一連の手続きを順に踏んだあとに最初に戻るだけなので、難しさはありませんでした)。Rubyは(Pythonも)その点がとても柔軟で、基本は手続き型なのに宣言的に書くこともできてしまいます。tokenizeメソッドは見た目も宣言的。read_fromメソッドはとても手続き的。evalメソッドは見た目は手続きっぽいけれども、実のところ宣言的。Haskellのeval関数に書き直したときも、はまってしまった関数の評価を除いては、ほぼそのままHaskellに持っていくことができました。C++で書こうとしたときにぶつかったのが、すべて手続きで書かないとならないというところ。先に書いたRubyやHaskellのコードを忘れて書いたならもっと楽に書けたのかもしれません。そこをあえて翻訳してみて、この壁が以外と大きいことにあらためて気付かされました。簡単に言うと...「全部手続きで書くのがこんなにめんどくさいとは思わなかった」ずいぶん経ちましたが以前にも「C++を使ってる場合じゃない」と書いたことがありました。C++はC++で適切な分野がありますし、重宝されている言語だと思いますし、わたし個人的にも好きですし。生産性や簡便なコードを書けることを考えると、もっと積極的に宣言的な記述ができる言語を活用していかないと、ユーザが求めているものを求めているうちに提供することはますます難しくなっていくように思えてなりません。プログラマの立場として。手続き型の言語でプログラミングを学んできた場合、宣言型の言語を改めて習得することの難しさはどのぐらいのものなのでしょう。これもまたどこかで訊いて回ってみたい気がします。02:56「手続き的」と「宣言的」のはざまでTweet関連記事2012-06-25「どう書く?」とつねに問う姿勢が大事、だと、思う。...2010-05-07evalできなかった本当の理由IE6でevalが失敗すると昨日のエントリで書きましたが。解決し...2008-08-31言語学習の素地Haskellを学んだとき。本格的に関数型言語を学んだという...2008-08-17言語と言語の距離どう抜く?にエントリしています。(6)はてなブログをはじめよう!E_Mattsanさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。