• ベストアンサー

関数型プログラミングを料理の仕方でたとえてください

関数型プログラミングを料理の仕方でたとえてください。 作る料理はなんでも構いません。 料理の一般的なレシピというのは、手続き型プログラミングで たとえることが可能だと思っています。

  • otaks
  • お礼率53% (270/507)

質問者が選んだベストアンサー

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.2

「手続き型」ではなく、「関数型」ですか、純粋Lispって、昔挫折したので、もう一度理解すべく以下のサイトをざっと読んでみました http://www.ibm.com/developerworks/jp/views/java/libraryview.jsp?sort_by=&show_abstract=true&show_all=&search_flag=&contentarea_by=Java+technology&search_by=%E9%96%A2%E6%95%B0%E5%9E%8B%E3%81%AE%E8%80%83%E3%81%88%E6%96%B9%3A&topic_by=-1&industry_by=-1&type_by=%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E7%A8%AE%E9%A1%9E&ibm-search=%E6%A4%9C%E7%B4%A2 「手続き型」にどっぷりつかってると解りにくいけど、JavaScript の closure関数みたいなのを引数そのものとして扱うので、材料そのものを引数にはしないらしい。 料理における「不変propaty」はなにかっていうと、「調理器具」だろう。 でもって、「関数そのものが引数になる」ということは、「調理行動」とか、「不変propatyとしてもつ器具による調理」が関数であり、引数になったり返値になるわけで、 ゆでる(){propaty:なべ;run(){ゆでる}} 煮付け(){propaty:なべ;run(){調味料を入れて、煮詰める}} ボウル盛り(){propaty:ボウル;盛りつけ(){}} 焼く(){propaty:フライパン;run(){焼く}} 皿盛り(){propaty:皿;盛りつけ(){}} 卵料理(調理法){ 状態チェック:卵 is 生 ? 調理法.run(); switch (){ 状態チェック:卵 is 固ゆで ? return ボウル盛り(); 状態チェック:卵 is 卵焼き ? return 皿盛り(); } } 結果 = 卵料理(ゆでる())  「結果」 には、ボウル盛り() が返ってくる、状態チェックすると固ゆで卵がはいってるとなって 結果 = 卵料理(焼く())  「結果」 には、皿盛り() が返ってきて、状態チェックすると、卵焼きが載っている という具合になるのですかね? かなり、いいかげんな文法で書いてますけど。文法すらもプログラミング対象になりえるらしいので。。。

otaks
質問者

お礼

ありがとうございます。 参照URLの技術文書の存在は知りませんでした。 結構文量もあるのでゆっくり見てみようと思います。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

面白そうな問題なので、頭を捻ってみましたが、ダメでした。 そもそも、料理は食材の状態を変化させるもの、関数型プログラミングで言うところの「副作用」ですから、純粋な関数型プログラミングとは相性がよくないでしょう。 自信はありませんが、あえてやるなら 「ゆで卵」関数 入力: 卵 出力: (入力された)卵 副作用: 卵はゆでられて、固まった状態になる といったところではないでしょうか?

otaks
質問者

お礼

「副作用」。聞いたことがあります。 関数型プログラミングでは副作用をおこしてはならないのですね。 となると入力で卵を入れたら、関数の中で「では、こちらがゆであがった卵です」 と入力した卵とは別の卵が出現してそれが返ってくるのかなと思ったりしました。

関連するQ&A

  • 関数型プログラミングの利点は何ですか?

    よく「副作用がない」ということが関数型プログラミングのメリットとして挙げられます。 しかし、手続き型プログラミングにおいても、副作用をもたらすモジュール設計は推奨されないと思います。 具体的に何がいいのかわかりません。

  • オブジェクト指向プログラミング

    一般に、オブジェクト指向プログラミングといわれているプログラミングに関してですが、 「関数・手続きを使用するプログラミング」と 「クラスを作成してプログラミング」というのは おおきな違いがあるのでしょうか? (クラスを作成しなくても関数・手続きで、プログラミングすれば 一緒じゃないかなぁと思っていますので・・・。) どなたか、これに関して、お返事をして頂けたら今後いろいろな面でかなり助かります。

  • プログラミングで関数を呼び出すというのは、定義した

    プログラミングで関数を呼び出すというのは、定義した関数を 使うという意味ですか?

  • プログラミングで関数を渡すとはどういう意味ですか?

    プログラミングで関数を渡すとはどういう意味ですか?

  • 料理の仕方

    料理をレシピでしか作れないです 同じかたいますか?

  • プログラミングのreturnというのは関数なんです

    プログラミングのreturnというのは関数なんですか? この画像で。 戻り値?

    • ベストアンサー
    • PHP
  • 料理出来るとは

    一般的に料理が出来るとはどのくらいのことを言うのでしょうか? レシピを見ないでつくることでしょうか?

  • 「料理ができない」とは?

    「料理ができない」という意味について教えて下さい。 「料理が不得意」とか「料理が嫌い」なら分かるんですが。 私が想像する「料理ができない」の意味 1.揚げ物などの比較的難しい料理が、まだ作れない 2.レシピを見ないと作れない 3.料理を作った事がない。 4.レシピを見ても作れない。(?) 一般的には、上記のどの意味と受け止めればいいでしょうか? 上記以外でも何かあれば教えて下さい。 私の意見としては、 レシピを読んで、書いてある通りに実行すれば 大人であれば大抵の人は料理が作れると思うんですが。 小学生が作ってるのもよく見ます。 特に難しい料理(天ぷら等の揚げ物等)はレシピ通りにやったつもりでも うまくいかない場合もあるかも知れませんが。 自分で「料理が出来ない」と言ってる人は、実は出来ないのではなく 「した事がない」という事なのでは? 自分はすごく間違った事言ってるかも知れませんが…

  • プログラミングで引数は関数に渡すものと認識している

    プログラミングで引数は関数に渡すものと認識しているんですが、関数以外にも渡す場面はありますか?

  • 料理

    自分で料理ができると言える基準。 レシピも見ずに何でも作れるなら料理ができると言えますが、一般的にどの程度の料理が作れると、私は料理ができると言えますか? 難しい料理、簡単な料理に限らず、一つの料理限定で作れるなら、私は料理ができると言えないのか? 逆に、料理は作れないと言える基準。 卵焼きや目玉焼きといった簡単な料理が作れても、それは料理は作れないと言われますか?

専門家に質問してみよう