2011-12-13 10 views

cevap

5

, bir liste alır şöyle bir işlev oluşturun: Artık

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

komut satırı listeyi başlangıç ​​işlevine geçirir, listeyi bozar ve toplamı yapar. Not Bunu test etmedim, ancak argümanları liste halinde alıyorsanız çalışmalıdır.

+0

Komut satırı kullanımı için bunu 'başlat' olarak adlandırmanıza gerek olmadığını unutmayın, ayrıca 'toplamı' olarak tanımlayabilirsiniz: 'sum ([X, Y]) -> sum (X, Y) .' ve 'sum/1' olarak dışa aktarın (daha sonra' sum/2' versiyonunu dışa aktarmanız gerekmez). Erlang için bir acemi olarak bana açıkça belli değildi. – atomicules

3

Adlandırılmış işlevin bir argümanı alması gerekliliğini ortadan kaldırmak için hiçbir yolun farkında değilim. Cody'nin de belirttiği gibi, bu argüman, parametre listesi tanımında yıkabileceğiniz bir liste olabilir.

Verdiğin komut satırını kullanarak, bu benim için çalışıyor:

-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

Tam sayıları listeden çıkarmanın daha zarif bir yolu olması gerektiğini biliyordum. Teşekkürler! :) – Cody

+0

Bu çok genel bir durum olmasa da. –

+0

Gerçekten de, bir parametre için iki öğenin bir listesini varsayar. Orijinal soruyla eşleşir ve bu yaklaşımın genellemesi basittir. Ne öneriyorsun? – Ben

4

Youcan yerine -eval anahtarı kullanın.

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