2011-12-13 7 views

risposta

5

Creare una funzione che prende una lista, in questo modo:

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

Ora, quando la riga di comando passa la lista alla funzione di avvio, interromperà la lista e farà la sommatoria. Nota: non l'ho provato, ma dovrebbe funzionare se si ottengono gli argomenti come una lista.

+0

Nota che per l'utilizzo da riga di comando non devi chiamarlo 'start' potresti anche definirlo come' sum' in questo modo: 'sum ([X, Y]) -> sum (X, Y) .' ed esporta come 'sum/1' (quindi non è necessario esportare la versione' sum/2'). Non mi è sembrato subito un principiante di Erlang. – atomicules

3

Non sono a conoscenza di alcun modo per aggirare il requisito che la funzione denominata accetta un argomento. Come menziona Cody, quell'argomento può essere una lista, che puoi destrutturare nella definizione dell'elenco dei parametri.

Utilizzo della riga di comando che hai dato, questo funziona per me:

-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

Sapevo che doveva esserci un modo più elegante per selezionare gli interi dalla lista. Grazie! :) – Cody

+0

Questo non è un caso molto generale però. –

+0

In effetti non lo è, in quanto assume un elenco di due elementi per un parametro. Corrisponde alla domanda originale e la generalizzazione di questo approccio è semplice. Che cosa suggeriresti? – Ben

4

Stagliano utilizzare l'interruttore -EVAL invece.

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