2011-05-11 8 views
8

के लिए कई तर्क मुझे यकीन है कि यह लिस्प में एक बहुत ही शुरुआती प्रश्न है, क्योंकि मैं सिर्फ भाषा सीख रहा हूं।मैपरकार

मेरे पास क्लिन नामक क्लिन में एक फ़ंक्शन है। यह किसी सूची में दिए गए परमाणु के समय की संख्या की गणना करता है। मैं जो करना चाहता हूं वह विभिन्न मानकों के साथ कई बार गिनती करने में सक्षम है, लेकिन खोज करने के लिए एक ही सूची है।

उदाहरण के लिए, मैं सूची में 'A, 'B, और 'C की संख्या गिनती करना चाहता हूं। मुझे उम्मीद थी कि मैं कुछ इस तरह कर सकता है:

(mapcar 'count '(A B C) myList) 

मैं समझ गए होंगे कि इस वजह '(A B C) में तत्वों की प्रत्येक MyList में तत्वों की केवल एक साथ रखा जा रहा है काम नहीं करता। किसी सूची में प्रत्येक आइटम को अतिरिक्त इनपुट पैरामीटर के साथ फ़ंक्शन लागू करने के लिए उचित बेवकूफ तरीका क्या है?

आगे स्पष्टीकरण के लिए, मैं इनपुट के रूप में '(A B C) और '(A A B C C C) लेने और (2 1 3) का उत्पादन करने में सक्षम होना चाहता हूं।

उत्तर

13

एक सूची (A B C) से प्रत्येक आइटम के साथ बार-बार समारोह count कॉल करने के लिए, हर बार मिलान आइटम गिनती उसी क्रम mylist:

(mapcar (lambda (x) (count x mylist)) '(A B C)) 
+3

एकदम सही है कि। ठीक वही जो मेरे द्वारा खोजा जा रहा था। आपका बहुत बहुत धन्यवाद! अब इसे पढ़कर, मैं देखता हूं कि मैंने शायद एक दर्जन समान समाधानों को देखा बिना वास्तव में यह समझने के बिना कि लैम्ब्डा फ़ंक्शन क्या कर रहा था। अब जब मैं अपनी विशिष्ट समस्या पर लागू उत्तर देखता हूं, तो यह बहुत अधिक समझ में आता है। –

+1

ज्ञान के क्षण को साझा करने के लिए धन्यवाद! अब [बंद] की समीक्षा करने के लिए एक अच्छा समय है (http://letoverlambda.com/textmode.cl/guest/chap2.html)। –