我在尋求改進我收到的編譯器警告的質量和數量 - 在Common Lisp中是否有一種方法可以在聲明的類型和實例上包含類型謂詞 - 實現特定的回答 沒問題,我很想看看它是如何完成的,如果有人在做。類型謂詞遍佈類型
編譯覆銅板如下:
(defun non-list (o)
(not (listp o)))
(deftype non-list()
'(satisfies non-list))
(defun example (a)
(list a))
(declaim (ftype (function (non-list) list) example))
(defun hmm()
(declare (optimize (debug 3) (safety 3)))
(let ((a '(a b c))
(b '(d e f)))
(declare (type list a))
(example '(g h i))
(example a)
(example b)))
我會得到一個編譯器在第一次調用警示example
- 提供可針對satisfies
要檢驗的 實例之一。這很好,在調試設置下,我會得到一個很好的運行時錯誤。我想知道是,如果我可以寫類似如下:
(defun non-list-typep (type)
(not (subtypep type 'list)))
並以某種方式整合它,這樣至少第二次調用 - (example a)
將在警告編譯時間作爲其聲明的類型list
會失敗謂詞non-list-typep
乾杯!
謝謝,現在看看這些。 – Lex