shinh さんのところにいろいろ書いた
ゴルフ紳士の shin-ichiro.h さんにプログラミングの才能が無いんだったら,誰にあるんだと w
http://shinh.skr.jp/m/?date=20070630#c03
まぁ,ようするに,ルールベース型の言語ってのは,人間が手書きするのではなく,自動生成のしやすさを念頭においたパラダイムだということです.その点が,他のプログラミングパラダイムとの根本的な違いですね.例えば,今話題の Haskell とかは,人間のミスをいかにして減らすかというパラダイムだと思います.
# Prolog なんかは,見た目こそルールベースですが,プログラムを作るための理論が全然整備されていません.なので,その理論の空間で何かをやろうとすると,すぐに小手先の拡張が必要になって,どんどん理論が技巧的に捻れていく (それが一見すると,いろいろ研究が進んでいて,高度化しているように見えるのですが.そのほとんどの技巧が,ET パラダイムではそもそも最初から必要の無い前提や拡張だったり).
また,ET 言語は,表記に S 式を採用したルールベース型言語なので,メタプログラミングでルールを動的に作って,システムに追加したり削除したりしながら,動的にプログラム自身を変更していくとか,そういう人工知能的な高度で柔軟なプログラミングも容易だったりします (もちろん,それが本意では無いのですが)
あと,ルールという形は,わりかし汎用的な形式で,低水準から高水準までを広くカバーする必要がある,プログラムを作るための体系を作ろうと思うと,必然的にこの形に成らざるを得ないんじゃないかなーとさえ思っています.
僕は今,ほとんど機械語みたいに書かれた低レベルの D ルール (メモリの塊 (配列) と数値しか扱わない) を C とか C# とかに変換して実行ファイルにするコンパイラを書いているのですが (これ自体は研究ではなくて,土台を作るための単なる作業).
そんな低レベルでも,全部末尾再帰 (goto ループになるからスタックなどは消費しない) とパターンマッチ (途中で条件比較にコンパイルされる) で書けるぶん,ルールベースの方が記述力が高いと思います.ルールは塊になってなくても,順番さえ合っていれば,最後には全部合成されて if-then-else の塊にまで落ちるので (ちゃんと順番に依存しないように条件部が書いてあれば,順番すら非依存になる).
# もちろん,そんなレベルを手書きすることは考えてなくて,もっと上のレベルのルールから様々なプログラム変換でそのレベルまで落とすんですが.計算も,プログラム生成 (メタ計算) も,全ては等価変換の連鎖として統一的に定式化される.
あー,そんな感じかもしれません.どうもありがとうございます.
うちのブログは,こういうことを書くと全くフィードバックが無くなるうえに,僕は自分の研究領域の独特の用語の使い方をしている (のだろうと思う) ので,バックグラウンドが異なる人々と用語の食い違いもたくさんあると思います.
# 例えば,プログラミング言語,とか,コンパイル,とか,基本的な概念さえも,人によって全く想像するものが違うと思うので (なるべく明確にしようとは思ってるのですが,そのせいで毎回毎回ブログの文章が回りクドクなりすぎて,かえってアイデアがダイレクトに伝わらなくなるという悪循環が)
というか,正直僕自身もあまり明確にわからないで行き当たりばったり書いてるので (駄目) いろいろその場の気分で不整合があるかもしれません.
まぁ,そもそも自分自身がやりたいこと,やるべきことをわかるようになるために研究しているわけですし,ブログってのは自分自身のアイデアの整理のために書いてるので.
テキトーに,僕の書いた文章から,何かを汲み取っていただけたならば幸いです.
文章に,真意も誤解も無いです.その人が得た内容が全てであり,人は結局の所,自分が読みたいようにしか文章を読むことができません.自分自身がやりたいことさえわからないのに,他人がやりたいことなど,そもそもわかるわけがない.
ふたたびコメントしたので,追記
http://shinh.skr.jp/m/?date=20070630#c03
まぁ,ようするに,ルールベース型の言語ってのは,人間が手書きするのではなく,自動生成のしやすさを念頭においたパラダイムだということです.その点が,他のプログラミングパラダイムとの根本的な違いですね.例えば,今話題の Haskell とかは,人間のミスをいかにして減らすかというパラダイムだと思います.
# Prolog なんかは,見た目こそルールベースですが,プログラムを作るための理論が全然整備されていません.なので,その理論の空間で何かをやろうとすると,すぐに小手先の拡張が必要になって,どんどん理論が技巧的に捻れていく (それが一見すると,いろいろ研究が進んでいて,高度化しているように見えるのですが.そのほとんどの技巧が,ET パラダイムではそもそも最初から必要の無い前提や拡張だったり).
また,ET 言語は,表記に S 式を採用したルールベース型言語なので,メタプログラミングでルールを動的に作って,システムに追加したり削除したりしながら,動的にプログラム自身を変更していくとか,そういう人工知能的な高度で柔軟なプログラミングも容易だったりします (もちろん,それが本意では無いのですが)
あと,ルールという形は,わりかし汎用的な形式で,低水準から高水準までを広くカバーする必要がある,プログラムを作るための体系を作ろうと思うと,必然的にこの形に成らざるを得ないんじゃないかなーとさえ思っています.
僕は今,ほとんど機械語みたいに書かれた低レベルの D ルール (メモリの塊 (配列) と数値しか扱わない) を C とか C# とかに変換して実行ファイルにするコンパイラを書いているのですが (これ自体は研究ではなくて,土台を作るための単なる作業).
そんな低レベルでも,全部末尾再帰 (goto ループになるからスタックなどは消費しない) とパターンマッチ (途中で条件比較にコンパイルされる) で書けるぶん,ルールベースの方が記述力が高いと思います.ルールは塊になってなくても,順番さえ合っていれば,最後には全部合成されて if-then-else の塊にまで落ちるので (ちゃんと順番に依存しないように条件部が書いてあれば,順番すら非依存になる).
# もちろん,そんなレベルを手書きすることは考えてなくて,もっと上のレベルのルールから様々なプログラム変換でそのレベルまで落とすんですが.計算も,プログラム生成 (メタ計算) も,全ては等価変換の連鎖として統一的に定式化される.
あー,そんな感じかもしれません.どうもありがとうございます.
うちのブログは,こういうことを書くと全くフィードバックが無くなるうえに,僕は自分の研究領域の独特の用語の使い方をしている (のだろうと思う) ので,バックグラウンドが異なる人々と用語の食い違いもたくさんあると思います.
# 例えば,プログラミング言語,とか,コンパイル,とか,基本的な概念さえも,人によって全く想像するものが違うと思うので (なるべく明確にしようとは思ってるのですが,そのせいで毎回毎回ブログの文章が回りクドクなりすぎて,かえってアイデアがダイレクトに伝わらなくなるという悪循環が)
というか,正直僕自身もあまり明確にわからないで行き当たりばったり書いてるので (駄目) いろいろその場の気分で不整合があるかもしれません.
まぁ,そもそも自分自身がやりたいこと,やるべきことをわかるようになるために研究しているわけですし,ブログってのは自分自身のアイデアの整理のために書いてるので.
テキトーに,僕の書いた文章から,何かを汲み取っていただけたならば幸いです.
文章に,真意も誤解も無いです.その人が得た内容が全てであり,人は結局の所,自分が読みたいようにしか文章を読むことができません.自分自身がやりたいことさえわからないのに,他人がやりたいことなど,そもそもわかるわけがない.
ふたたびコメントしたので,追記
http://shinh.skr.jp/m/?date=20070707#p03
ここの syd_syd さんに同意だな。
結局皆さんが気にしてるのは〜からどの辺が「筋が良い」のか?
のあたり。
何がしたいか、っていう What はたぶんそれなりに想像がつくというか割とプログラム書きの妄想の一つだと思うんだけど、 How がよくわからないという。
という質問に対して返答が基本的にふたたび What なのでよくわからなくなるんだな。「できたプログラムの正しさが全て保証されるという点がブレイクスルーです」とかそいう。で How を知りたければ論文読むしか無いらしいのだけど、それは残念なことで僕は文章読んでもコード書かないとさっぱりわからない人間らしいので。
(01:56)
本日のツッコミ(全1件) [ツッコミを入れる]
_ あろは (2007-07-07 08:02)
ようするに,僕もそっちにはそれほど深く関わってないのでよくわからない,という.要領を得ない解答しかできなくてすいません.
# 僕も,理論屋では無く,手を動かす方が好きなタイプなので.いつまでもそれではいかんのですが… 数学は難しいです (そもそも英語すらあまり読めないという.優秀な皆様がうらやましい).
論文を読んだのがだいぶ昔なのでいろいろ抜けてますけど,確定節からルールを作る際,その正しさが保証されることにより,かなり大きな可能性が広がるというのを実感して衝撃を受けた記憶があります.
一見大したことないように見えるかもしれませんが,他のパラダイムだと,(自動探索,あるいは人間のひらめきにより) 「一個一個ルールを作っていく」 という時点で,正しさの保証が困難だと思います.
あと,まだ抽象的な論文しか無いというのも悪いんでしょうね.具体的なツールが何かあれば良いのですが,まだまだそこまでは,なかなか.
問題の背景知識を確定節 (論理式の一種) で書いておいて,解きたい問題 (クエリ) の具体例を与える.そして,問題の具体例を簡単化できるルールを確定説から抽出していくことにより,正しさが保証されたプログラム (ルール) を段階的に蓄積していくことができるというのが,その本筋だったと思います.
論理式 = 面倒で冗長,プログラム書いた方が早い,という偏見があるようですが,僕は論理式よりも表現力が豊かな表記法を他に知りません.
表現力だけだったら,Haskell なども同じくらいリッチなのかもしれませんが.関数型の方面には,「どう書けるか」 ばかりで,「どう作るか」 という理論的なサポートが欠けていると感じます.
っと,また抽象論になってしまいましたね.すいません.
