Erlang 异常错误:右侧值2不匹配

Erlang 异常错误:右侧值2不匹配,erlang,Erlang,我的代码正在寻找最大回文数,别名N=reverse(N)。代码还没有完成。但请帮我找出异常的原因 find_palindrome(List1, List2, Increment, IfPalindrome) -> List_of_values = [X * Y || X <- List1, Y <- List2], find_palindrome(0, 1, List_of_values, Increment, IfPalindrome). find_palindro

我的代码正在寻找最大回文数,别名N=reverse(N)。代码还没有完成。但请帮我找出异常的原因

find_palindrome(List1, List2, Increment, IfPalindrome) ->
  List_of_values = [X * Y || X <- List1, Y <- List2],
  find_palindrome(0, 1, List_of_values, Increment, IfPalindrome).

find_palindrome(Max, N, List_of_values, Increment, IfPalindrome) ->
  case IfPalindrome(lists:nth(N, List_of_values)) of
    true ->
      case Max < lists:nth(N, List_of_values) of
        true ->
          Max = lists:nth(N, List_of_values),
          find_palindrome(Max, Increment(N), List_of_values, Increment, IfPalindrome);
        false ->
          find_palindrome(Max, Increment(N), List_of_values, Increment, IfPalindrome)
      end;
    false ->
      find_palindrome(Max, Increment(N), List_of_values, Increment, IfPalindrome)
  end.


check_palindrome(N) ->
  (N) == (list_to_integer(lists:reverse(integer_to_list(N)))).

problem4() ->
  find_palindrome(lists:seq(100, 999), lists:seq(100, 999), fun(X) -> X = X + 1 end, fun check_palindrome/1).

在Erlang shell中尝试以下操作:

1> X = 1.
1
2> X = X + 1.
** exception error: no match of right hand side value 2
这是因为在Erlang中,变量只能分配一次。它叫。变量绑定到某个值后,该变量就不能绑定到任何其他值。存储在变量中的值不能更改。您需要创建一个新变量。在这种情况下,您可以写:

3> Y = X + 1.
2

您应该知道,
=
实际上是一个模式匹配操作符,而不是赋值。左侧可以是任何模式,而不仅仅是变量。您可以编写例如
2=1+1
,这样将成功匹配,而
3=1+1
将使您
右侧值2不匹配。绑定变量可以在模式中用于其值,例如,
X=2,X=1+1
将成功


因此在
Max=lists:nth(N,值的列表)
中,因为
Max
已经被绑定(作为函数的参数),所以使用了它的值,并且它最终是
0=lists:nth(1,值的列表)
(使用
find\u palindrome(0,1,值的列表,Increment,IfPalindrome)中的值)
除非
列出以
0

开头的值,否则将失败。这也是的副本。在提问之前,您是否费心搜索过?这个问题已经在这里被回答了很多次。在您知道它是关于变量不变性的其他问题的副本之前,您首先需要知道这是关于变量不变性的,更重要的是,要知道这样的东西是存在的。这是第一个链接的副本,但我看不出它是第二个链接的副本。你需要知道这个问题的答案,然后才能看到它是副本。好一点。这个问题是关于一个特定的鳕鱼e不起作用。解决方案与另一个问题相似的事实并不意味着它是重复的。许多问题可以用相同或相似的答案来回答,但重要的是为什么一个特定的答案回答了一个特定的问题,而不是答案本身。
3> Y = X + 1.
2