2012-04-06 10 views
5

ERLANG में: मान लें कि हमारे पास एक फ़ंक्शन f() है जो F1 को इनपुट के रूप में लेता है जहां F1 एक फ़ंक्शन है। वहाँ एक रास्ता एफ 1 के इनपुट पैरामीटर की संख्या पता करने के लिए है।पास किए गए फ़ंक्शन के पैरामीटर की संख्या (erlang)

मुझे लगता है किसी भी तरह वहाँ एक समाधान है, लेकिन मुझे यकीन नहीं कर रहा हूँ। उदाहरण के लिए:

-module(high). 
-compile(export_all). 

f1() -> 1. 
f2(X) -> X. 
f3(X, Y) -> {X,Y}. 

run(F) -> io:format("F ~p ~n", [F]). 

तो, वहाँ समारोह रन/1 के लिए किसी भी तरह से पारित कर दिया समारोह [मुख्य रूप से पारित कर दिया समारोह के इनपुट पैरामीटर की संख्या] के बारे में जानकारी पता करने के लिए है।

नोट: कृपया सूचित है कि यह एक सैद्धांतिक सवाल यह है कि हो सकता है। नोट: लागू की कोड (मज़ा, [तर्क]) खुला स्रोत में उपलब्ध .. यह मेरे hep सकता है मुझे लगता है कि है।

उत्तर

12

erlang: fun_info (मज़ा, arity)।

उदाहरण

F = fun(A,B) -> A+B end. 
#Fun<erl_eval.12.111823515> 
3> erlang:fun_info(F,arity). 
{arity,2} 
0

के लिए आप module_info/1 का उपयोग अपने मॉड्यूल के बारे में जानकारी प्राप्त कर सकते हैं।

module_info/1

कॉल module_info(Key), जहां Key एक परमाणु है, मॉड्यूल के बारे में जानकारी के एक टुकड़े देता है।

निम्न मान Key के लिए अनुमति दी जाती है:

...

exports {नाम, arity} की एक सूची देता है मॉड्यूल में सभी निर्यात कार्यों के साथ tuples।

functions मॉड्यूल में सभी कार्यों के साथ {नाम, Arity} tuples की एक सूची देता है।

http://erlang.org/doc/reference_manual/modules.html


run(F) -> find_value(F,module_info(exports)). 

find_value(Key, List) -> 
    case lists:keyfind(Key, 1, List) of 
     {Key, Result} -> {Key,Result}; 
     false -> io:format("There is no function called ~w.~n", [Key]) 
    end. 
संबंधित मुद्दे