2014-11-03 13 views
6

Tôi đang cố gắng để có được ba số ra khỏi một chuỗiCách truy cập nhiều giá trị được hàm trả về (ví dụ: cl: parse-integer)?

(parse-integer "12 3 6" :start 0 :junk-allowed t) 
12 ; 
2 

Bây giờ này trả 2 là tốt, mà là số nơi nó có thể được phân tích. Vì vậy, bây giờ tôi có thể cung cấp cho

(parse-integer "12 3 6" :start 2 :junk-allowed t) 
3 ; 
4 

Nhưng làm thế nào để lưu trữ các giá trị của 24 rằng nó trả lại. Nếu tôi setq nó vào một biến chỉ 123 được lưu trữ?

Trả lời

11

Vui lòng đọc "lý thuyết" here.

Tóm lại, bạn có thể ràng buộc multiple values với multiple-value-bind:

(multiple-value-bind (val pos) (parse-integer "12 3 6" :start 0 :junk-allowed t) 
    (list val pos)) 
==> (12 2) 

Bạn cũng có thể setf nhiều values:

(setf (values val pos) (parse-integer "12 3 6" :start 0 :junk-allowed t)) 
val ==> 12 
pos ==> 2 

Xem thêm VALUES Forms as Places.

PS. Trong trường hợp cụ thể của bạn, bạn có thể chỉ cần làm

(read-from-string (concatenate 'string 
           "(" 
           "12 3 6" 
           ")")) 

và nhận danh sách (12 3 6). Đây không phải là cách hiệu quả nhất mặc dù (vì nó phân bổ bộ nhớ không cần thiết).

PPS Xem thêm:

  1. How to convert a string to list using clisp?
  2. In lisp, how do I use the second value that the floor function returns?
Các vấn đề liên quan