KMRCLを眺める(198) GENERALIZED-EQUAL-FUNCTION — #:g1

Posted 2010-09-02 12:10:00 GMT

今回は、KMRCLのequal.lispからGENERALIZED-EQUAL-FUNCTIONです。
名前からすると同じ関数かどうかを判定するものと思われます。
定義は、

(defun generalized-equal-function (obj1 obj2)
  (string= (function-to-string obj1) (function-to-string obj2)))
前回眺めたFUNCTION-TO-STRINGを使っていて、結果をSTRING=で比較したりしているのですが、FUNCTION-TO-STRINGの大本となるFUNCTION-LAMBDA-EXPRESSIONが処理系依存の動作なため、処理系により上手く結果がでないようです。
(恐らくAllegro CL、CLISPでは多分意図した通り動く)
(KL::GENERALIZED-EQUAL-FUNCTION #'CAR #'CAR)
;⇒ T ;SBCL/CLISP/Allegro CL

(KL::GENERALIZED-EQUAL-FUNCTION (LAMBDA (X) (CAR X)) (LAMBDA (X) (CADR X))) ;⇒ NIL ;Allegro CL/CLISP ;⇒ T ;SBCL

SBCL/Clozure CLではこういうのはどう書いたら良いのか…。

comments powered by Disqus