Peter Norvig 有一篇文章描述了 解数独游戏的程序,甚至是最难的 解数独游戏的程序,它结合了确定性逻辑运算和可能解的巧妙遍历。后者是递归完成的; 下面是函数(来源) :
def search(values):
"Using depth-first search and propagation, try all possible values."
if values is False:
return False ## Failed earlier
if all( len( values[s]) == 1 for s in squares):
return values ## Solved!
## Chose the unfilled square s with the fewest possibilities
_,s = min( (len( values[s]), s)
for s in squares
if len(values[s]) > 1
)
return some( search( assign( values.copy(), s, d))
for d in values[s]
)
(为了我的眼睛,我加了一些空格、 CR 和标签; 向诺维格博士道歉。)
在评论的正下方有一行以“ _,s
”开头。这似乎是未打包的元组(len(values[s]),s
) ,其值最小为 s
。Norvig 博士使用“ _
”作为变量名仅仅是为了表明它是一个“不在乎”的结果,还是有其他原因?是否有时候“ _
”被推荐作为一个变量名?在交互模式下,“ _
”保存了前面操作的答案; 在非交互代码中是否有类似的函数?
谢谢你的回答。我猜答案是 Alex Martelli 的“附加值”; 他指出“ _,vbl _ of _ interest”这个成语通常是 DSU 成语的一个副作用,而 DSU 成语本身在很大程度上是不必要的。