2016-06-13 45 views
0

我正在通過編程Elixir(PragProg)的示例問題。問題是寫一個函數返回fromto。我的解決方案如下。但是,有時它們會返回字符(相當於它們的ascii)。我怎樣才能避免這種情況,並只返回數字。如何防止作爲字符返回的數字?

defmodule MyList do 
    def span(), do: [] 
    def span(from), do: [from] 
    def span(from, to) when from == to, do: [from] 
    def span(from, to) when from > to, do: [from] ++ span(from - 1, to) 
    def span(from, to) when from < to, do: [from] ++ span(from + 1, to) 
end 

MyList.span(31,34) #=> [31,32,33,34] 
MyList.span(-5,-8) #=> [-5,-6,-7,-8] 
MyList.span(65,68) #=> 'ABCD' (I need a list with numbers 65 to 68) 
+0

'> MyList.span(65,68)== [65,66,67,68]#=> TRUE',這是控制檯如何解釋帶有'charcodes'的列表。 http://stackoverflow.com/questions/32804904/how-to-print-out-a-maps-array-values-in-elixir – sobolevn

+0

確定有一個模式匹配,但我想打印數字(想象一下,技術用戶使用它,他們會引發一個缺陷...... lol) – Bala

+0

然後'IO.inspect [65,66,67,68],char_lists :: as_lists' – sobolevn

回答

2

您不能防止這樣,怎麼一回事,因爲藥劑和Erlang沒有用戶定義的類型,所以沒有辦法列表和一個單引號字符來區分,因爲兩者都只是列出。你真的不應該有太多的問題。

如果它的打印,你可以做這樣的事情

IO.inspect [65, 66, 67, 68], char_lists: false#[65, 66, 67, 68] 

有關事業的好詳細的解釋,去這個職位 - https://stackoverflow.com/a/30039460/3480449

你的模塊,其打印在添加此因此,您將需要額外的方法,並讓別人私人

defmodule MyList do 
    def span(), do: IO.inspect [], char_lists: false 
    def span(from), do: IO.inspect [from], char_lists: false 
    def span(from, to), do: IO.inspect span_h(from, to), char_lists: false 

    defp span_h(from, to) when from == to, do: [from] 
    defp span_h(from, to) when from > to, do: [from] ++ span(from - 1, to) 
    defp span_h(from, to) when from < to, do: [from] ++ span(from + 1, to) 
end 
+0

我如何將這個在我的函數? – Bala

相關問題