如何从命令行运行arity函数大于1的erlang程序

时间:2011-12-13 23:13:23

标签: erlang

如何从UNIX命令行运行大于1的arity函数?

示例程序:

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

编译后

  

erlc test.erl

我正在尝试像

这样的东西
  

erl -noshell -s test sum 5 3 -s init stop

但显然它不起作用,因为它将5 3视为列表......

3 个答案:

答案 0 :(得分: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).

现在,当您的命令行将列表传递给start函数时,它将打破列表并执行求和。注意我没有对此进行过测试,但是如果您将参数作为列表获取,它应该可以工作。

答案 1 :(得分:4)

您可以使用-evil开关代替。

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

答案 2 :(得分:3)

我不知道有什么方法可以解决命名函数接受一个参数的要求。正如Cody所提到的那样,一个参数可以是一个列表,您可以在参数列表定义中对其进行解构。

使用您提供的命令行,这对我有用:

-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)).