कई सामान्य लिस्प अनुक्रम फ़ंक्शन इनपुट के रूप में उचित अनुक्रम लेते हैं और आउटपुट के रूप में अनुक्रम लौटाते हैं। एक उचित अनुक्रम से शुरू करके, फ़ंक्शन एक और उचित अनुक्रम कैसे वापस नहीं कर सकता है? उदाहरण?

2
davypough 22 मई 2019, 19:43

1 उत्तर

सबसे बढ़िया उत्तर
(mapcan #'rest (list (list 0 1 2) (cons :a :b)))
=> (1 2 . :b)

... लेकिन यह सच है कि आप परिणामस्वरूप अधिकांश समय उचित अनुक्रमों की अपेक्षा कर सकते हैं; विभिन्न कारणों (कार्यान्वयनकर्ताओं की लागत, आदि) के लिए कार्यों को कम निर्दिष्ट किया जा सकता है।

वैसे, ध्यान दें कि NCONC को निर्दिष्ट किया गया है एक सूची (कम से कम हाइपरस्पेक में) लौटाएं, लेकिन उसी पृष्ठ में दी गई औपचारिक परिभाषा के परिणामस्वरूप गैर-सूचियां होने की अनुमति मिलती है, उदाहरण के लिए (nconc nil 2) 2 है। परिणाम के प्रकार का यह अधूरा अनुमान (हस्ताक्षर में, फ़ंक्शन का वास्तविक विवरण नहीं) अन्य सभी परिणामों को दूषित करता है:

(mapcan #'rest (list (list) (cons 1 2)))
=> 2

प्रस्तावित ANSI परिवर्तन और ANSI स्पष्टीकरण और इरेटा

3
coredump 23 मई 2019, 10:53