2011-12-13 8 views

Respuesta

5

Crear una función que toma una lista, así:

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

Ahora, cuando la línea de comandos pasa la lista a la función de inicio, romperá la lista y realizará la suma. Tenga en cuenta que no he probado esto, pero debería funcionar si obtiene los argumentos como una lista.

+0

Tenga en cuenta que para el uso de la línea de comandos no tiene que llamarlo 'start' también podría definirlo como' suma' como: 'suma ([X, Y]) -> suma (X, Y) .' y exporta como 'suma/1' (no necesariamente necesitas exportar la versión' sum/2'). No fue inmediatamente obvio para mí como novato de Erlang. – atomicules

3

No conozco ninguna forma de evitar el requisito de que la función nombrada tome un argumento. Como Cody menciona, ese único argumento puede ser una lista, que usted puede desestructurar en la definición de la lista de parámetros.

Usando la línea de comandos que le diste, esto funciona para mí:

-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

Sabía que tenía que haber una forma más elegante de sacar los enteros de la lista. ¡Gracias! :) – Cody

+0

Sin embargo, este no es un caso muy general. –

+0

De hecho, no lo es, ya que supone una lista de dos elementos para un parámetro. Concuerda con la pregunta original, y la generalización de este enfoque es directa. ¿Qué sugieres? – Ben

4

Youcan utilizar el interruptor -EVAL lugar.

Cuestiones relacionadas