2014-11-03 11 views
6

Ben şimdi bu o çözümlenen olabilir numarası olan yanı 2 döndüren bir dizeBir işlev tarafından döndürülen birden çok değere nasıl erişilir (ör. Cl: ayrıştırıcı tamsayı)?

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

üzerinden üç sayı almaya çalışıyorum. Bu yüzden şimdi

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

verebilir Ama nasıl iade 2 ve 4 değerini muhafaza ederim. setq Ive 3 sadece bir değişkene kaydediliyor mu?

cevap

11

"Teori" here'u okuyun.

Kısaca, sen bağlayabilir multiple valuesmultiple-value-bind ile:

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

yapabilirsiniz ayrıca setf birden values: Ayrıca VALUES Forms as Places

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

Bkz.

PS. sizin özel durumda, sadece

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

yapmak ve liste (12 3 6) alabilirsiniz. Bu en etkili yol olsa da (gereksiz bellek ayırdığı için).

PPS Ayrıca bakınız:

  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?
İlgili konular