Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-09-02

KMRCLを眺める(198) GENERALIZED-EQUAL-FUNCTION

| 21:10 | KMRCLを眺める(198) GENERALIZED-EQUAL-FUNCTION - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(198) GENERALIZED-EQUAL-FUNCTION - わだばLisperになる

今回は、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ではこういうのはどう書いたら良いのか…。