在破译SBCL编译器消息时遇到困难:
; in: DEFUN PURIFY-FILE
; (DEFUN DEPENDENCIES::PURIFY-FILE (DEPENDENCIES::FILE)
; "Transforms problematic symbols to benign NIL in file, before reading.
; Returns a string of altered file content."
; (LET ((DEPENDENCIES::FILE-STRING
; (ALEXANDRIA:READ-FILE-INTO-STRING DEPENDENCIES::FILE))
; (DEPENDENCIES::MODIFIED-FILE-STRING ""))
; (SETF DEPENDENCIES::MODIFIED-FILE-STRING
; (CL-PPCRE:REGEX-REPLACE-ALL "[ trn]'[A-Za-z0-9!@$%&*_+:=<.>/?-]+"
; DEPENDENCIES::FILE-STRING " NIL"))
; (CL-PPCRE:REGEX-REPLACE-ALL
; "[(][qQ][uU][oO][tT][eE][ trn]+[A-Za-z0-9!@$%&*_+:=<.>/?-]+[)]"
; DEPENDENCIES::MODIFIED-FILE-STRING "NIL")))
; --> PROGN SB-IMPL::%DEFUN SB-IMPL::%DEFUN SB-INT:NAMED-LAMBDA
; ==>
; #'(SB-INT:NAMED-LAMBDA DEPENDENCIES::PURIFY-FILE
; (DEPENDENCIES::FILE)
; (DECLARE (SB-C::TOP-LEVEL-FORM))
; "Transforms problematic symbols to benign NIL in file, before reading.
; Returns a string of altered file content."
; (BLOCK DEPENDENCIES::PURIFY-FILE
; (LET ((DEPENDENCIES::FILE-STRING #)
; (DEPENDENCIES::MODIFIED-FILE-STRING ""))
; (SETF DEPENDENCIES::MODIFIED-FILE-STRING #)
; (CL-PPCRE:REGEX-REPLACE-ALL
; "[(][qQ][uU][oO][tT][eE][ trn]+[A-Za-z0-9!@$%&*_+:=<.>/?-]+[)]"
; DEPENDENCIES::MODIFIED-FILE-STRING "NIL"))))
;
; note: type assertion too complex to check:
; (VALUES STRING &OPTIONAL BOOLEAN &REST T).我对此函数的规范是(declaim (ftype (function (pathname) (values string (member NIL T))) purify-file))
是不是因为CL-PPCRE:REGEX-REPLACE-ALL返回了多个值?如果是这样,如何使用ftype指定所有多个值的类型--在本例中是字符串& NIL或T?谢谢。
发布于 2021-03-03 05:31:06
事实上,正如消息所表明的那样,类型for (values string (member NIL T))对于SBCL来说太复杂了。将类型the更改为(values t t) works。
https://stackoverflow.com/questions/66444432
复制相似问题