Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 公共lisp中非常奇怪的错误_Function_Command Line_Common Lisp - Fatal编程技术网

Function 公共lisp中非常奇怪的错误

Function 公共lisp中非常奇怪的错误,function,command-line,common-lisp,Function,Command Line,Common Lisp,这真让我头疼 我在一个文件中编写了以下简单函数 (defun find-num (string) (if (> (length string) 1) (parse-integer (remove (coerce (get-first-letter string) 'character) string)) ;else

这真让我头疼

我在一个文件中编写了以下简单函数

 (defun find-num (string)
   (if (> (length string) 1)
       (parse-integer (remove (coerce (get-first-letter string)
                                      'character)
                              string))
     ;else
     1))
它所做的是在删除第一个字母后解析字符串“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
顺便说一句:

只是

(parse-integer (remove (aref string 0) string))
最好是:

(parse-integer (subseq string 1))
是最好的

(parse-integer string :start 1)
顺便说一句:

只是

(parse-integer (remove (aref string 0) string))
最好是:

(parse-integer (subseq string 1))
是最好的

(parse-integer string :start 1)

我还发现其他一些函数也有类似的行为。我将你的函数复制到一个文件中,用(aref string 0)替换(get first letter string),加载该文件,它就工作了。我和@RainerJoswig做的一样,它也工作了。@wvxvw哈哈,你完全正确。我现在觉得自己像个白痴。我还发现其他一些函数也有类似的行为。我将你的函数复制到一个文件中,用(aref string 0)替换(get first letter string),加载文件,它就工作了。我和@RainerJoswig做的一样,它也工作了。@wvxvw哈哈,你完全正确。我现在觉得自己像个白痴。看到重构过程真是太好了。那太干净了。真不敢相信,除了以一种乏味的方式实现自己的函数之外,我从来没有找到任何有用的内置函数。返回第一个字母的(aref字符串1)不是(aref字符串0)吗?看到重构过程真是太好了。这太干净了。真不敢相信我从来没有找到过任何有用的内置函数,而不是以一种单调乏味的方式实现我自己的函数。返回第一个字母的(aref字符串1)实际上不是(aref字符串0)吗?