ผลลัพธ์ที่น่าแปลกใจจากอัลกอริธึม Elixir แบบเรียกซ้ำ [ซ้ำกัน]

ฉันกำลังเริ่มร่างโครงสร้างของอัลกอริธึมแบบเรียกซ้ำที่จะสร้างรายการที่อยู่ติดกันของจุดตัดเลขฐานสิบหกในบอร์ดเกมสไตล์ 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]]]

person Christopher Milne    schedule 27.07.2017    source แหล่งที่มา
comment
โปรดแจ้งให้เราทราบหากคำตอบนั้นไม่ได้ตอบคำถามของคุณทั้งหมด   -  person Dogbert    schedule 27.07.2017
comment
ขอบคุณ @Dogbert มันไม่แน่นอน   -  person Christopher Milne    schedule 27.07.2017