APEL version

Shuhei KOBAYASHI shuhei @ aqua.ocn.ne.jp
1999年 11月 9日 (火) 19:38:02 JST


>>>>> In <14375.34213.571464.61603M @ wanderlust.dq.isl.ntt.co.jp>,
>>>>> teranisi @ gohome.org (Yuuichi Teranishi/寺西裕一) wrote:
> 「product-version XX以上の feature が provide されているか判定」-p
> みたいなのが general に用意されてると便利かもしれないと思います。
> ;; どうやって実現するかは?ですが..。

こんなものでいいんでしょうか?

;; (product-find-by-name "APEL") =>  ["APEL" (9 23) "Nippori"]
;; (product>= (product-find-by-name "APEL") '(9 22))   => t
;; (product>= (product-find-by-name "APEL") '(9 22 1)) => t
;; (product>= (product-find-by-name "APEL") '(9 23))   => t
;; (product>= (product-find-by-name "APEL") '(9 23 1)) => nil
;; (product>= (product-find-by-name "APEL") '(9 24))   => nil
(defun product>= (product require-version)
  (let ((product-version (product-version product)))
    (while (and product-version require-version
                (= (car product-version)(car require-version)))
      (setq product-version (cdr product-version)
            require-version (cdr require-version)))
    (cond
     ((null require-version))
     (product-version
      (> (car product-version)(car require-version))))))

;; (product-find-by-feature 'poe) => ["APEL" (9 23) "Nippori"]
;; (product-require 'poe '(9 22)) => t
;; (product-require 'poe '(9 23)) => t
;; (product-require 'poe '(9 24)) => nil
(defun product-require (feature version)
  (when (require feature nil t)
    (let ((product (product-find-by-feature feature)))
      (when product
        (product>= product version)))))

ただし, `require' は byte-compiler で特別扱いされているはずなので,
`require' を `product-require' で代用するのでなく, (require FEATURE)
した後で (product-require FEATURE VERSION) で判定する方が無難だと
思います.

-- 
Shuhei KOBAYASHI




More information about the APEL-ja mailing list