आप इस्तेमाल कर सकते हैं LOOP:
(setq *l1* (loop for x from 1 to 100 collect x))
(loop for x in *l1* while (<= x 10) collect x)
तुम सच में एक अलग समारोह के रूप में यह की जरूरत है:
(defun take-while (pred list)
(loop for x in list
while (funcall pred x)
collect x))
और यहाँ हम कर रहे हैं:
T1> (take-while (lambda (x) (<= x 10)) *l1*)
(1 2 3 4 5 6 7 8 9 10)
लेकिन हम की तुलना:
(loop for x in *l1* while (<= x 10) collect x)
(take-while (lambda (x) (<= x 10)) *l1*)
मुझे लगता है कि मैं सिर्फ लूप के साथ रहूंगा।
अनंत दृश्यों के लिए, आप Series पर एक नज़र ले सकता है:
T1> (setq *print-length* 20)
20
T1> (setq *l1* (scan-range :from 1))
#Z(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...)
T1> (until-if (lambda (x) (> x 10)) *l1*)
#Z(1 2 3 4 5 6 7 8 9 10)
नहीं एक अच्छा विचार है। यह पूंछ भी नहीं है। यह किसी भी सूची में ढेर को उड़ा देगा ... –
स्वीकार करने के लिए धन्यवाद, लेकिन ध्यान दें कि शायद डैनली उत्तर बेहतर है ... यह पूंछ-रिकर्सिव – 6502
@rainer joswig भी नहीं है: मैं मानता हूं कि लूप बेहतर है – 6502