jbc*_*oko 0 command-line function common-lisp
这实在是让我很头疼
我在文件中编写了以下简单函数。
(defun find-num (string)
(if (> (length string) 1)
(parse-integer (remove (coerce (get-first-letter string)
'character)
string))
;else
1))
Run Code Online (Sandbox Code Playgroud)
它的作用是在删除第一个字母后解析字符串“a23”中的数字。我假设只有第一个字符是字母,其余的都是“数字”。
我加载文件,当我尝试运行该函数时,它给我错误,说: 正确的列表不能以“a3”结尾......什么???
但是,当我直接在命令行中复制并粘贴相同的代码时,该函数将按预期工作。
这是什么 ?常见的 Lisp 错误?还是有什么我没有看到的?
;; Loading file C:\Users ... (hidden)
;; Loaded file C:\Users ... (hidden)
T
[2]> (find-num "a3")
*** - ENDP: A proper list must not end with "a3"
The following restarts are available:
ABORT :R1 Abort main loop
Break 1 [3]> :a
[4]> (defun find-num (string)
(if (> (length string) 1)
(coerce (get-first-letter string) 'character) string))
;else
1))
WARNING: DEFUN/DEFMACRO: redefining function FIND-NUM in top-level, was
defined in C:\Users\.... (hidden)
FIND-NUM
[5]> (find-num "a3")
3 ;
1
Run Code Online (Sandbox Code Playgroud)
顺便提一句。:
(parse-integer (remove (coerce (get-first-letter string)
'character)
string))
Run Code Online (Sandbox Code Playgroud)
只是
(parse-integer (remove (aref string 0) string))
Run Code Online (Sandbox Code Playgroud)
更好:
(parse-integer (subseq string 1))
Run Code Online (Sandbox Code Playgroud)
是最好的
(parse-integer string :start 1)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
985 次 |
最近记录: |