Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 在Elixir上输出一个简单的棋盘游戏,但变量不是递减的。如何解决这个问题?_Variables_For Loop_Elixir_Decrement - Fatal编程技术网

Variables 在Elixir上输出一个简单的棋盘游戏,但变量不是递减的。如何解决这个问题?

Variables 在Elixir上输出一个简单的棋盘游戏,但变量不是递减的。如何解决这个问题?,variables,for-loop,elixir,decrement,Variables,For Loop,Elixir,Decrement,我有一个名为main(row,col)的函数,它将取2个整数,分别放入row和col中。然后它将创建一个板的输出,因此main(2,3)将创建一个2×3板 spaces= row*col 在这种情况下,空格=6,每次创建一个单元格时应该减少1。然而,它并没有做到这一点。我运行此命令时的输出是 Main.main(2,3) +---+---+---+ | 6| 6| 6| | | | | +---+---+---+ | 6| 6| 6| | | | | +

我有一个名为main(row,col)的函数,它将取2个整数,分别放入row和col中。然后它将创建一个板的输出,因此main(2,3)将创建一个2×3板

spaces= row*col 
在这种情况下,空格=6,每次创建一个单元格时应该减少1。然而,它并没有做到这一点。我运行此命令时的输出是

 Main.main(2,3)
+---+---+---+
|  6|  6|  6|
|   |   |   |
+---+---+---+
|  6|  6|  6|
|   |   |   |
+---+---+---+
我需要它

 Main.main(2,3)
+---+---+---+
|  6|  5|  4|
|   |   |   |
+---+---+---+
|  3|  2|  1|
|   |   |   |
+---+---+---+
这是我的密码:

defmodule Main do

  def main(row,col) do
    spaces = row*col

    for i <- 0..(row-1) do
      for j <- 0..(col-1) do
        if j == 0 do
          IO.write "+"
        end 

        IO.write "---+"
      end
      IO.puts ""
      columns = col

      for columns <- 1..columns do
        if columns == 1 do
          IO.write "|"
        end

        if spaces < 10 do
          IO.write "  "
          IO.write spaces
          IO.write "|"
        else if spaces < 100 do
          IO.write " "
          IO.write spaces
          IO.write "|"
        end

        if spaces > 99 do
          IO.write spaces
          IO.write "|"
        end
        spaces = (spaces - 1) 
      end
    end
    IO.puts ""
    columns = col
    for columns <- 1..columns do
      if columns == 1 do
        IO.write "|"
      end
      IO.write"   |"
    end

    IO.puts ""
    if i == row-1 do
      botside = col
      for botside <- 1..col do
        if botside == 1 do
          IO.write "+"
        end
        IO.write "---+"
      end
    end
  end
end

end
不会因为任何原因而减少。。谢谢您的时间和帮助。

电话线

spaces = (spaces - 1)
被放在理解中并不能达到你的期望。它将新的局部变量
空格
声明为最外层的
空格
减一。这个局部变量
空格
,尽管它与最外层的变量同名,但在理解结束时会消失

整个代码都是非长生不老药的习惯用法,因此很难在这里提出任何优雅的解决方案。一般来说,在长生不老药中要避免状态

在这里,我们可以使用:

spaces = spaces + 1 - columns
线路

spaces = (spaces - 1)
被放在理解中并不能达到你的期望。它将新的局部变量
空格
声明为最外层的
空格
减一。这个局部变量
空格
,尽管它与最外层的变量同名,但在理解结束时会消失

整个代码都是非长生不老药的习惯用法,因此很难在这里提出任何优雅的解决方案。一般来说,在长生不老药中要避免状态

在这里,我们可以使用:

spaces = spaces + 1 - columns

正如@mudasobwa所指出的,很难告诉您如何解决这个问题,因为它与函数式编程中通常采用的方式完全相反

也就是说,这里有一个在Elixir中实现递减循环的示例:

 defmodule Test do
   def decrementing_loop(initval) do
         IO.inspect initval
         if (initval > 0) do
           decrementing_loop(initval-1)
         end
   end
 end
除非您可能希望将函数传递给递减循环,如下所示:

这样就可以称之为:

Test.decrementing_loop(10,&IO.inspect/1)
关键是我实际上并没有修改
initval
,而是将当前
initval-1
的新参数传递给函数的递归调用


综上所述,如果你真的想学习长生不老药,你最好投资一本好书,而不是通过问一系列的问题来啃一啃一啃

正如@mudasobwa所指出的,很难告诉您如何解决这个问题,因为它与函数式编程中通常采用的方式完全相反

也就是说,这里有一个在Elixir中实现递减循环的示例:

 defmodule Test do
   def decrementing_loop(initval) do
         IO.inspect initval
         if (initval > 0) do
           decrementing_loop(initval-1)
         end
   end
 end
除非您可能希望将函数传递给递减循环,如下所示:

这样就可以称之为:

Test.decrementing_loop(10,&IO.inspect/1)
关键是我实际上并没有修改
initval
,而是将当前
initval-1
的新参数传递给函数的递归调用


综上所述,如果你真的想学习长生不老药,你最好投资一本好书,而不是通过问一系列的问题来啃一啃一啃

以下是我首先创建列表的意思

rows=3
cols=2
top = rows*cols

labels = Enum.to_list top..1  # [6,5,4,3,2,1]

c = Enum.to_list 1..rows # [1,2,3]
c = List.duplicate c, cols # [[1,2,3],[1,2,3]]
c = List.flatten c   # [1,2,3,1,2,3]

r = Enum.to_list 1..cols # [1,2]
r = List.duplicate r, rows #[[1,2],[1,2],[1,2]]
r = List.flatten r   # [1,2,1,2,1,2]

list = List.zip( [r, c, labels] )

board = list |> Enum.each( fn {r,c,label} -> print_cell r,c, label, rows, cols end)

defp print_cell r,c, label, rows,cols do
 # your conditional cases for each edge case here
end

下面是我首先创建列表的意思

rows=3
cols=2
top = rows*cols

labels = Enum.to_list top..1  # [6,5,4,3,2,1]

c = Enum.to_list 1..rows # [1,2,3]
c = List.duplicate c, cols # [[1,2,3],[1,2,3]]
c = List.flatten c   # [1,2,3,1,2,3]

r = Enum.to_list 1..cols # [1,2]
r = List.duplicate r, rows #[[1,2],[1,2],[1,2]]
r = List.flatten r   # [1,2,1,2,1,2]

list = List.zip( [r, c, labels] )

board = list |> Enum.each( fn {r,c,label} -> print_cell r,c, label, rows, cols end)

defp print_cell r,c, label, rows,cols do
 # your conditional cases for each edge case here
end

你需要放弃对易变性的思考。Elixir是一种函数式语言,这意味着你不能做破坏性的赋值。g
spaces=(spaces-1)
最好先创建列表,然后再对其进行操作。一个单元格标签列表;另一个用于行编号,另一个用于列。然后把它们拉在一起。然后使用Elixir优秀列表、枚举或流模块来创建您喜欢的板。您需要放弃对可变性的思考。Elixir是一种函数式语言,这意味着你不能做破坏性的赋值。g
spaces=(spaces-1)
最好先创建列表,然后再对其进行操作。一个单元格标签列表;另一个用于行编号,另一个用于列。然后把它们拉在一起。然后使用Elixir优秀列表、枚举或流模块来创建您喜欢的板。这是一个完美的理解用例:)
r=for@mudasobwa:true——这是关于它对您的可读性的,谢谢您的帮助。现在是时候看看Enum教程了,因为每个人都在不断地提到它,而我不知道它是什么。这是一个完美的理解用例:)
r=for@mudasobwa:true——这是关于它对你、你自己以及你的帮助的可读性。现在是时候看看Enum教程了,因为每个人都在不断地提到它,而我不知道它是什么。不过似乎很有用。