0

これは本当に頭が痛いです

次の単純な関数をファイルに記述しています。

 (defun find-num (string)
   (if (> (length string) 1)
       (parse-integer (remove (coerce (get-first-letter string)
                                      'character)
                              string))
     ;else
     1))

最初の文字を削除した後、文字列「a23」から数値を解析します。最初の文字のみが文字で、残りは「数字」であると想定しました。

ファイルをロードし、関数を実行しようとすると、次 のようなエラーが表示されます。

しかし、同じ正確なコードをコマンドラインに直接コピーして貼り付けると、関数は正常に機能します。

これは何ですか ?一般的な 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
4

1 に答える 1

5

ところで:

(parse-integer (remove (coerce (get-first-letter string)
                               'character)
                       string))

ただです

(parse-integer (remove (aref string 0) string))

優れている:

(parse-integer (subseq string 1))

最高です

(parse-integer string :start 1)
于 2013-01-07T14:08:17.600 に答える