lisp如何将不同的数字字符串解析为数字

lisp如何将不同的数字字符串解析为数字,lisp,common-lisp,Lisp,Common Lisp,我有一些lisp数字字符串要解析为数字: “3.000000000 E+00” “0.0d0” “3” 在google之后,请参阅: 在google之后,请参阅: 以下是测试: (string-to-number "3.000000000E+00") ; ==> 3.0 (string-to-number "0.0d0") ; ==> 0.0d0 (string-to-number "3") ; ==> 3 (handler-b

我有一些lisp数字字符串要解析为数字:

“3.000000000 E+00”
“0.0d0”
“3”

在google之后,请参阅:

在google之后,请参阅:

以下是测试:

(string-to-number "3.000000000E+00") ; ==> 3.0
(string-to-number "0.0d0")           ; ==> 0.0d0
(string-to-number "3")               ; ==> 3

(handler-bind ((argument-not-numeric-string #'(lambda (c) (invoke-restart 'restart-with-string "0"))))
  (string-to-number "hello")) ; ==> 0

(handler-bind ((argument-not-numeric-string #'(lambda (c) (use-value 0))))
  (string-to-number "hello")) ; ==> 0

(string-to-number "aa" 16) ; ==> 170

(string-to-number "gf" 16) 
*** - Condition of type ARGUMENT-NOT-NUMERIC-STRING.
The following restarts are available:
USE-VALUE      :R1      USE-VALUE
RESTART-WITH-STRING :R2 RESTART-WITH-STRING
ABORT          :R3      Abort main loop
Break 1 [50]> :r2
Enter new value: "ff"
; ==> 255
以下是测试:

(string-to-number "3.000000000E+00") ; ==> 3.0
(string-to-number "0.0d0")           ; ==> 0.0d0
(string-to-number "3")               ; ==> 3

(handler-bind ((argument-not-numeric-string #'(lambda (c) (invoke-restart 'restart-with-string "0"))))
  (string-to-number "hello")) ; ==> 0

(handler-bind ((argument-not-numeric-string #'(lambda (c) (use-value 0))))
  (string-to-number "hello")) ; ==> 0

(string-to-number "aa" 16) ; ==> 170

(string-to-number "gf" 16) 
*** - Condition of type ARGUMENT-NOT-NUMERIC-STRING.
The following restarts are available:
USE-VALUE      :R1      USE-VALUE
RESTART-WITH-STRING :R2 RESTART-WITH-STRING
ABORT          :R3      Abort main loop
Break 1 [50]> :r2
Enter new value: "ff"
; ==> 255

请使用Quicklisp提供的库。

请使用库,可从Quicklisp获得。

请不要发布使用
read
的示例,这些示例至少没有绑定
*read eval*
nil
。谢谢Rainer Joswig。请不要发布使用
read
的示例,这些示例至少没有绑定
*read eval*
nil
。谢谢Rainer乔斯威格。
(string-to-number "3.000000000E+00") ; ==> 3.0
(string-to-number "0.0d0")           ; ==> 0.0d0
(string-to-number "3")               ; ==> 3

(handler-bind ((argument-not-numeric-string #'(lambda (c) (invoke-restart 'restart-with-string "0"))))
  (string-to-number "hello")) ; ==> 0

(handler-bind ((argument-not-numeric-string #'(lambda (c) (use-value 0))))
  (string-to-number "hello")) ; ==> 0

(string-to-number "aa" 16) ; ==> 170

(string-to-number "gf" 16) 
*** - Condition of type ARGUMENT-NOT-NUMERIC-STRING.
The following restarts are available:
USE-VALUE      :R1      USE-VALUE
RESTART-WITH-STRING :R2 RESTART-WITH-STRING
ABORT          :R3      Abort main loop
Break 1 [50]> :r2
Enter new value: "ff"
; ==> 255