【入門】Common Lisp その6【質問よろず】at TECH
【入門】Common Lisp その6【質問よろず】 - 暇つぶし2ch104:デフォルトの名無しさん
09/04/09 23:25:38
>>95

>問題にしてるのは
>・メッセージ名が同じ
>・プロトコルが異なる
C++のオーバーロードのおかげで「同じメッセージ」のように見えるが、実態としてメッセージとしてもプロトコルとしても同じではないものな希ガス。
というか、あえて言うならメンバ関数名とシグネチャあわせてひとつのメッセージ名でないの?

function update(target, flg) {
  target[arguments.callee.name+'With'+flg.constructor.name].apply(null, arguments);
}
function updateWithBoolean(target, flg) { // update(obj, true)相当
  /* ほげほげ */
}
function updateWithNull(target) { // update(obj)相当
  /* ふがふが */
}

↑こういう付加情報からのメッセージ名推測(?)みたいな動的なことをC++,Java他はコンパイル時に暗黙のうちにやっているというだけでないのかな。
>この二つを満たすメッセージを定義する上手い方法が総称関数には無いのではないか、という点です。
>単一ディスパッチの言語にはあるにもかかわらず、です。
異なるメッセージをプレフィクスに基づいて同じメッセージのように推測するという「特別扱い=オーバーロード」があるかないかというだけで、
単一ディスパッチ/多重ディスパッチの問題じゃないんじゃないかと思うぞ。Objective-Cなんかこういうことしてくれないでしょ。単一ディスパッチ”なのにもかかわらず”。
>もし統一的に表すために新たに総称関数を新たに定義した場合、その総称関数をどこに配置
>するかという事も新たに考えねばなりませんし、機械でできそうな処理を人間が書く必要が
>あるという点でLisp的ではない気がします。
そこでLisp的にはマクロの出番なんでないかな。

※Lisp系のスレでJavascriptで答えてしまってすまないorz



次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch