直到并包括第一个重复项的所有列表项

All list items up to, and including, the first repeated item

考虑:

x =. 0 1 2 3 4 1 3 4 99
v =. [ {.~ (>: @ i.&1 @ (#@~. = #\))
v x   NB. => 0 1 2 3 4 1

行为正确。但如您所见,v 冗长得令人羞耻。有更好的解决方案吗?

你想要 monad ~: (nub sieve):

   v =: {.~ 1 + 0 i.~ ~:

   x =: 0 1 2 3 4 1 3 4 99

   v x
0 1 2 3 4 1

代码审查:

  • 在 code-golf 上下文之外,不要使用 #\ 代替 i.@#。太萌了,难维护,特殊代码优化器识别不到。
  • 不要分配给名称 xyuvmn(除了在特殊情况下,并且始终在本地显式上下文中)。