Search code examples
lispcommon-lispclispslime

Lisp: How to prompt-read a float?


I have a function where I am using parse-integer and prompt-read together. However, I need one of these integers to be a float. When I change parse-integer to parse-float it no longer works. Here is the function:

(defun prompt-for-cat ()                                                       
  (add-record                                                                  
    (make-cat                                                                    
      (prompt-read "Name")                                                        
      (prompt-read "Coloring")                                                    
      (or (parse-integer (prompt-read "Weight") :junk-allowed t) 0)               
      (or (parse-integer (prompt-read "Experience") :junk-allowed t) 0)           
      (or (parse-integer (prompt-read "Length") :junk-allowed t) 0))))  

This works as is, but I need that first integer, "Weight" to be a float. parse-float does not work and I cannot find the correct way to do this.


Solution

  • (let ((weight (progn
                    (format t "Weight: ")
                    (read t))))
      (if (floatp weight) weight 0))