アカウント名:
パスワード:
プログラミング言語としては関数型であろうとも、ループの機能を持っていないものは無いのでは?関数型プログラミングの原理/スタイルを学ぶ時には再帰で反復処理を記述したとしても、現実のアプリケーション開発ではループを使わないはずが無いでしょう(そもそも再帰的なアルゴリズムを実装したり、再帰の方が簡明に記述できる処理をするのなら話は別だが)
再帰は深さが不定なツリーを舐めるような処理、つまり文字通り「再帰的」な処理に適してる。ループじゃキツイでしょう?
ちょうどツリーを全検索しなくちゃいけないことがあったばかりなんですが久しぶりに再帰処理使いました良いか悪いかは状況によるよね
SQL未だにループは無い再帰共通表式ができるまで、チューリング完全ではなかったぐらいだ
> チューリング完全ではなかったぐらいだ
チューリング完全でなかったのは意図的な仕様でしょ。
プログラミング言語がチューリング完全であるというのは必ずしも望ましい特性ではない。
ええっ、SQLがチューリング完全になってしまったのか再帰共通表式とやらを調べて驚いた
HaskellにはForもWhileもありません。機械的にコーディングすればいいだけの会社なら命令型以外のパラダイムなんて知る必要もないのでしょうが。
whileはあるぞ…
機械的にコーディングするのがプログラミングの全てだと思い込んでる人が多い気がする、ここを見てると。
さすがにそれは酷い思い込みだと言わざるを得ない
# 思い込んでる人が多い、という思い込みのことだぞ
自分は、設計は機械的には無理だが、コーディングはほぼ機械的に設計に従って手癖なんだが、人それぞれかもな。
Haskellも機械的にコーディングするだけですが。
反復はともかく、再帰が必要なデータ構造が増えている。
たとえば、製品AにはオプションA1,A2,A3があって、オプションA1にはサブオプションA11、A12、A13があって、A12にはサブサブオプションA121が..なんて階層になった選択画面を作ってくれといった話はどこにでもあると思うんだけど。もちろん、結果がどう残るのかはともかく、表示上はA1とA2は排他。
で、何階層まであるんですか?と聞けば決まってない、でも簡単でしょ?と言い返される。
簡単にサクっとつくってやろうじゃないか。#でも、後々ちゃんと保守できる技術者確保しなければどうなっても知らないよ。
関数型言語の話題はここに書けばいいですかね。
私の場合、普段づかいはMLなので、forもwhileもあるのだけど、foldの頻度が高いですね。 fold >> 再帰, for, while最近は、こうですね。昔は、なるべく再帰で書いていた頃もあった。
純粋関数型だとか変数の束縛とかで調べてみてください。
こいつらは数学的関数とよく似ています。ある関数のある入力における応答は同じですし、その評価中は変数の値も変化しません。そもそもループ変数が用意できないわけです。数学でのループ的な処理は x[i+1]=x[i]+1 などのように係数変えてったりそんな感じですが、その感じです。
最近の言語はマルチパラダイムとかよく言いますけど、関数型言語のパラダイムは正直別格だと思います。#なので中々手を出せずにいる俺チキン
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
計算機科学者とは、壊れていないものを修理する人々のことである
再帰呼び出しで反復処理を行うのが一般的? (スコア:0)
プログラミング言語としては関数型であろうとも、ループの機能を持っていないものは無いのでは?
関数型プログラミングの原理/スタイルを学ぶ時には再帰で反復処理を記述したとしても、現実のアプリケーション開発ではループを使わないはずが無いでしょう
(そもそも再帰的なアルゴリズムを実装したり、再帰の方が簡明に記述できる処理をするのなら話は別だが)
Re:再帰呼び出しで反復処理を行うのが一般的? (スコア:2)
再帰は深さが不定なツリーを舐めるような処理、つまり文字通り「再帰的」な処理に適してる。
ループじゃキツイでしょう?
Re: (スコア:0)
ちょうどツリーを全検索しなくちゃいけないことがあったばかりなんですが久しぶりに再帰処理使いました
良いか悪いかは状況によるよね
Re:再帰呼び出しで反復処理を行うのが一般的? (スコア:1)
SQL
未だにループは無い
再帰共通表式ができるまで、チューリング完全ではなかったぐらいだ
Re:再帰呼び出しで反復処理を行うのが一般的? (スコア:2)
> チューリング完全ではなかったぐらいだ
チューリング完全でなかったのは意図的な仕様でしょ。
プログラミング言語がチューリング完全であるというのは
必ずしも望ましい特性ではない。
Re: (スコア:0)
ええっ、SQLがチューリング完全になってしまったのか
再帰共通表式とやらを調べて驚いた
Re:再帰呼び出しで反復処理を行うのが一般的? (スコア:1)
Re: (スコア:0)
HaskellにはForもWhileもありません。
機械的にコーディングすればいいだけの会社なら命令型以外のパラダイムなんて知る必要もないのでしょうが。
Re: (スコア:0)
whileはあるぞ…
Re: (スコア:0)
機械的にコーディングするのがプログラミングの全てだと思い込んでる人が多い気がする、ここを見てると。
Re: (スコア:0)
さすがにそれは酷い思い込みだと言わざるを得ない
# 思い込んでる人が多い、という思い込みのことだぞ
Re: (スコア:0)
自分は、設計は機械的には無理だが、コーディングはほぼ機械的に設計に従って手癖なんだが、人それぞれかもな。
Re: (スコア:0)
Haskellも機械的にコーディングするだけですが。
Re: (スコア:0)
反復はともかく、再帰が必要なデータ構造が増えている。
たとえば、
製品AにはオプションA1,A2,A3があって、オプションA1にはサブオプションA11、A12、A13があって、A12にはサブサブオプションA121が..
なんて階層になった選択画面を作ってくれといった話はどこにでもあると思うんだけど。
もちろん、結果がどう残るのかはともかく、表示上はA1とA2は排他。
で、何階層まであるんですか?と聞けば決まってない、でも簡単でしょ?と言い返される。
簡単にサクっとつくってやろうじゃないか。
#でも、後々ちゃんと保守できる技術者確保しなければどうなっても知らないよ。
Re: (スコア:0)
関数型言語の話題はここに書けばいいですかね。
私の場合、普段づかいはMLなので、forもwhileも
あるのだけど、foldの頻度が高いですね。
fold >> 再帰, for, while
最近は、こうですね。
昔は、なるべく再帰で書いていた頃もあった。
Re: (スコア:0)
純粋関数型だとか変数の束縛とかで調べてみてください。
こいつらは数学的関数とよく似ています。
ある関数のある入力における応答は同じですし、
その評価中は変数の値も変化しません。
そもそもループ変数が用意できないわけです。
数学でのループ的な処理は x[i+1]=x[i]+1 などのように係数変えてったりそんな感じですが、その感じです。
最近の言語はマルチパラダイムとかよく言いますけど、関数型言語のパラダイムは正直別格だと思います。
#なので中々手を出せずにいる俺チキン