2012-02-07 10 views
6

में कॉलम में तत्वों की गिनती की गणना करना मैं ऑर्ग-मोड स्प्रेडशीट के माध्यम से emacs-calc का उपयोग कर रहा हूं और मैं एक कॉलम में मानों की संख्या गिनना चाहता हूं, जो एक विशिष्ट मान से अधिक हैं (10 कहो)।ऑर्ग-मोड स्प्रैडशीट

मैं वर्तमान में computations के लिए emacs-calc का उपयोग कर रहा हूं, लेकिन अगर emacs-lisp में कोई समाधान है, तो इसका बहुत स्वागत होगा!

मुझे पता है कि vcount वेक्टर में मानों की संख्या की गणना करेगा, लेकिन वह उस वेक्टर में सभी मानों की गणना करेगा। मैं एक शर्त कैसे जोड़ सकता हूं ताकि केवल मान> 10 गिना जा सके?

दूसरे शब्दों में, मैं एक mysterious_function कि 2 वापसी होगी इस तरह के एक मामले में चाहते हैं:

mysterious_function([2,14,11,3,9,1]) 

उत्तर

4

अपने उत्तरों के लिए सभी टैंक। मुझे कोरोबा के प्रस्ताव से प्रेरित एमएक्स-कैल्क का उपयोग करके एक समाधान मिला।

vcount(map(<if(gt(#1,10), 1, [])>, [15,2,5,13])) 

तो, ऑर्ग मोड स्प्रेडशीट में एक स्तंभ के इलाज के लिए, मैं, उदाहरण के लिए कर सकते हैं:

vcount(map(<if(gt(#1,10), 1, [])>, @[email protected])) 

नक्शा समारोह है कि मामले में, एक समारोह (एक गुमनाम एक लागू करने के लिए प्रयोग किया जाता है) एक वेक्टर के प्रत्येक तत्व के लिए। यदि तत्व 10 से अधिक है, तो हम एक 1, अन्यथा एक खाली वेक्टर डालते हैं।

4

मैं एक शर्त कैसे जोड़ सकते हैं ताकि केवल मूल्यों> 10 गिने जाते हैं?

mysterious_function ([2,14,10,3,9,1])

:

दूसरे शब्दों में, मैं एक mysterious_function कि 2 वापसी होगी इस तरह के एक मामले में चाहते हैं

एर, आपके पास केवल एक उस सूची में 10 से अधिक मान है - क्या आपका मतलब> = 10 है?

वैसे भी, मैं ऑर्ग मोड स्प्रैडशीट के बारे में पता नहीं है, लेकिन यहाँ कैसे Emacs लिस्प में यह करने के लिए है:

 
(defun mysterious-function (vector) 
    (length 
    (remove-if-not #'(lambda (n) 
       (>= n 10)) 
      (append vector nil)))) 
+0

धन्यवाद, वास्तव में, उदाहरण के बुरी तरह से चुना गया था, मैं तय है कि, धन्यवाद। आपके समाधान के लिए भी धन्यवाद :) –

3

तुम भी एक अतिरिक्त स्तंभ कि

if($2>10,1,string("")) 
शामिल होंगे बना सकते हैं

और फिर इस कॉलम पर vcount लागू करें।

2

logical operations बाद से, हम बस sum कर सकते हैं परीक्षण झूठा के लिए सच के लिए 1 और 0 का उत्पादन:

vsum(map(<gt(#1,10)>,@[email protected])) 
संबंधित मुद्दे

 संबंधित मुद्दे