アカウント名:
パスワード:
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds
パラダイム (スコア:0)
学ぶべきは言語ではなくパラダイムなんだが、他に学ぶべきというと宣言的プログラミングくらいしか思いつかんな。
それはともかく、宣言的だと関数型と論理型とあるが、論理型だとある種のループ構造が使えて便利なんだが…
Re: (スコア:0)
関数型と論理型はパラダイム的には等価じゃん?
Re: (スコア:2, 興味深い)
論理型は、「複数の変数の関係を記述する」「ルールの適用の順に実行」
という差が一応あるんだけど、工夫すれば相互に記述出来るので等価といってもいいかな。
一見、関数型は手続き型に見えるし、副作用を持つ関数型言語は、実際、手続き型言語と
ほぼ同じ。論理型でも、Prolog なんかは、backtrack以外は、ほとんど手続き型と言っても
良い。
一方で、OPS5系とかCommitted Choice言語、あるいは関数型言語でも、
実行の順序も外側の関数で実行出来るものから実行するなんてのがあって、
どんな順序で動くのか予測が難しいものは、手続き型からは遠い。
人が知らない言語、あるいは学ぶのが難しい言語を使いこなすというのは、快感ではあるんだが、
虚しくもある。(淋しいという感じ?)
Re:パラダイム (スコア:0)
共通する特徴は、単一代入、
関数型のみは、関数閉包
論理型のみは、ユニフィケーションとバックトラック
どれも宣言的プログラミングに有効です。
> 関数型は、「入力に対して一つの出力」「関数の適用の順に実行」
後者は、strictnessの事を言っていると思うんだが、
これは関数型言語の型付き・型なしと同じように、どちらの実装もある。
strictだとML、non-strictはhaskellが一番有名か。
> 論理型は、「複数の変数の関係を記述する」「ルールの適用の順に実行」
前者はユニフィケーションのことだと思うが、べつに複数の変数の関係であることが関数型に対する差ではないしなあ。
あっちだって多値関数くらいあるし。
後者は、端的に違うとだけ言っときます。
むしろバックトラックすること(=どこから実行してもかまわないこと)が本質で、
カットオペレータ(や、関係ないけどnegation as failure)は夾雑物です。
> 一方で、OPS5系とかCommitted Choice言語、
Committed Choice型言語になると、もはやこれっぽっちも論理型言語とは言えなくなってくるわけだが、まあいいや。
> あるいは関数型言語でも、実行の順序も外側の関数で実行出来るものから実行するなんてのがあって、
それこそstrictnessの話で、停止性にはかかわるけど、停止する限りでは実行結果は同じ。
> どんな順序で動くのか予測が難しいものは、手続き型からは遠い。
並行手続き型言語(例 occam)だって同じように順序の予測は難しい。
それはともかく、ユニフィケーションと制約は強力なんだよな。。。
他の言語で気軽に使えないものか。