2011-12-13 12 views
5

से 1 से बड़े arity के फ़ंक्शन के साथ एक एरलांग प्रोग्राम कैसे चलाएं UNIX कमांड लाइन से 1 से बड़े arity का फ़ंक्शन कैसे चलाएं?कमांड लाइन

उदाहरण कार्यक्रम:

-module(test). 
-export([sum/2]). 
sum(X,Y)->io:write(X+Y). 

erlc test.erl संकलन

erl -noshell -s परीक्षण की तरह कुछ

मैं कोशिश कर रहा हूँ के बाद योग 5 3-इनिट स्टॉप

लेकिन स्पष्ट रूप से यह काम नहीं करता है क्योंकि यह व्यवहार करता है सूची के रूप में 5 3 ...

उत्तर

5

एक समारोह है कि एक सूची इतनी तरह लेता है, बनाएँ:

-module(test). 
-export([sum/2, start/1]). 

start(Args) -> 
    % Pick X and Y args out of Args list and convert to integers 
    sum(X, Y). 
sum(X, Y) -> io:write(X+Y). 

अब जब अपने आदेश पंक्ति सूची को प्रारंभ समारोह में पास करता है, यह सूची को तोड़ देगा और सारांश करेगा। नोट मैंने इसका परीक्षण नहीं किया है, लेकिन अगर आपको सूची के रूप में तर्क मिल रहे हैं तो इसे काम करना चाहिए।

+0

ध्यान दें कि कमांड लाइन उपयोग के लिए आपको इसे 'स्टार्ट' कहने की ज़रूरत नहीं है, तो आप इसे 'योग' के रूप में भी परिभाषित कर सकते हैं: 'sum ([X, Y]) -> योग (एक्स, वाई) .' और 'sum/1' के रूप में निर्यात (तब आपको' sum/2' संस्करण को निर्यात करने की आवश्यकता नहीं है)। Erlang के लिए एक नौसिखिया के रूप में मुझे तुरंत स्पष्ट नहीं था। – atomicules

3

मुझे नाम की फ़ंक्शन एक तर्क लेने की आवश्यकता के बारे में जानने के किसी भी तरीके से अवगत नहीं है। जैसा कि कोडी का उल्लेख है, कि एक तर्क एक सूची हो सकती है, जिसे आप पैरामीटर सूची परिभाषा में नष्ट कर सकते हैं।

कमांड लाइन आप दे दी है का उपयोग करना, यह मेरे लिए काम करता है:

-module(test). 
-export([sum/1]). 

sum([X, Y]) -> 
    io:format("X: ~p Y: ~p", [X, Y]), 
    list_to_integer(atom_to_list(X)) + list_to_integer(atom_to_list(Y)). 
+0

मुझे पता था कि सूची से पूर्णांक चुनने के लिए और अधिक शानदार तरीका होना चाहिए था। धन्यवाद! :) – Cody

+0

हालांकि यह एक बहुत ही सामान्य मामला नहीं है। –

+0

वास्तव में यह नहीं है, क्योंकि यह पैरामीटर के लिए दो तत्वों की एक सूची मानता है। यह मूल प्रश्न से मेल खाता है, और इस दृष्टिकोण का सामान्यीकरण सरल है। आप क्या सुझाव देंगे? – Ben

4

Youcan बजाय -eval स्विच का उपयोग करें।

erl -eval 'io:format("~p",[hello]).'