Mar*_*iro 8 haskell list elixir
我想要一个Elixir函数来生成一个n参数出现列表,类似于Haskell的replicate函数:
Input: replicate 3 5
Output: [5,5,5]
Input: replicate 5 "aa"
Output: ["aa","aa","aa","aa","aa"]
Input: replicate 5 'a'
Output: "aaaaa"
Run Code Online (Sandbox Code Playgroud)
我已经创建了一个"复制"整数n时间的函数:
import String
def replicate(number, n)
String.duplicate(to_string(number), n)
|> split("", trim: true)
|> Enum.map(fn n -> String.to_integer(n) end
end
Run Code Online (Sandbox Code Playgroud)
但这与规格不符:(.你能帮帮我吗?
raa*_*cer 10
def replicate(n, x), do: for _ <- 1..n, do: x
Run Code Online (Sandbox Code Playgroud)
如果您希望最后一个案例返回字符串,那么您应该使用guard添加此类型的定义,如下所示:
def replicate(n, [x]) when is_integer(x), do: to_string(for _ <- 1..n, do: x)
def replicate(n, x), do: for _ <- 1..n, do: x
iex(1)> replicate 3, 5
[5, 5, 5]
iex(2)> replicate 3, 'a'
"aaa"
Run Code Online (Sandbox Code Playgroud)
您还可以使用String.duplicate/2和List.duplicate/2作为其他建议:
def replicate(n, x = [c]) when is_integer(c), do: String.duplicate(to_string(x), n)
def replicate(n, x), do: List.duplicate(x, n)
Run Code Online (Sandbox Code Playgroud)
另请注意,Char列表'a'和字符串在Elixir中"a"是不同的东西,因此请确保您正确理解这一点.
最后,如果这不是一个家庭任务,那么我建议不要重新发明自行车,但如果可能的话,直接使用String和List模块中的函数.
| 归档时间: |
|
| 查看次数: |
2882 次 |
| 最近记录: |