ฉันกำลังเริ่มร่างโครงสร้างของอัลกอริธึมแบบเรียกซ้ำที่จะสร้างรายการที่อยู่ติดกันของจุดตัดเลขฐานสิบหกในบอร์ดเกมสไตล์ Settlers of Catan อย่างไรก็ตาม นั่นไม่ใช่ปัญหาเร่งด่วนที่ฉันต้องแก้ไข
ปัญหาที่ฉันพบสามารถพบได้ในผลลัพธ์ที่ฉันวางไว้ใต้ตัวอย่างโค้ด ค่าบางค่าในแถวแรกและแถวสุดท้ายของเอาต์พุตดูเหมือนจะเป็นสตริงโดยไม่มีเหตุผลที่ชัดเจน
ฉันหวังว่านักพัฒนา Elixir ที่มีประสบการณ์มากกว่าจะทราบสาเหตุของผลลัพธ์ที่เสียหาย และสามารถอธิบายได้ว่าทำไมมันถึงเกิดขึ้น และต้องทำอย่างไรกับมัน
def recurse_outer() do
list = [Enum.into(0..5, []),
Enum.into(6..23, []),
Enum.into(24..53, [])
]
Enum.map(list, &recurse_inner(&1))
end
defp recurse_inner(list, index \\ 0, result \\ [])
defp recurse_inner([head | tail] = list, index, result) do
next =
case tail do
[next | tail] -> next
[] -> :no_next
end
adjacencies = [head, next]
recurse_inner(tail, index + 1, [adjacencies | result])
end
defp recurse_inner([], _, result), do:
Enum.reverse(result)
เอาท์พุท:
iex(159)> Board.recurse_outer
[[[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, :no_next]],
[[6, 7], '\a\b', '\b\t', '\t\n', '\n\v', '\v\f', '\f\r', [13, 14], [14, 15],
[15, 16], [16, 17], [17, 18], [18, 19], [19, 20], [20, 21], [21, 22],
[22, 23], [23, :no_next]],
[[24, 25], [25, 26], [26, 27], [27, 28], [28, 29], [29, 30], [30, 31],
[31, 32], ' !', '!"', '"#', '#$', '$%', '%&', '&\'', '\'(', '()', ')*', '*+',
'+,', ',-', '-.', './', '/0', '01', '12', '23', '34', '45', [53, :no_next]]]