我试图解决Project Euler中的第4个问题,但我遇到了问题。我需要将两个范围相互增加,但我不确定如何使用Elixir。以下是我与之合作的内容:
def is_palindrome?(n) do
Integer.to_string(n) == Integer.to_string(n)|> String.reverse
end
def multiply do
range_1 = 100..999
range_2 = 100..999
for n <- range_1, n * range_2, do: n |> is_palindrome? |> Enum.max
end
我收到此错误
(ArithmeticError) bad argument in arithmetic expression
如何将两个范围相乘?
答案 0 :(得分:1)
如果要将每个元素与每个其他元素相乘,则需要从列表中选取元素(<-
)两次。 is_palindrome?
应在for
中用作过滤器。最后,Enum.max
应该在for
之外。
defmodule A do
def is_palindrome?(n) do
Integer.to_string(n) == Integer.to_string(n)|> String.reverse
end
def multiply do
range_1 = 100..999
range_2 = 100..999
Enum.max for n <- range_1, m <- range_2, is_palindrome?(n * m), do: n * m
end
end
iex(1)> A.multiply
906609