你能解释一下 Norvig 的数独代码中的 assign 函数吗?

Can you explain the assign function in Norvig's Sudoku code?

我有 Peter Norvig 在他的数独解算器中使用的这段 Python 代码。我不明白为什么 assign 应该对 'values' 做任何事情,因为因为代码中没有任何地方 'values' 得到更新并且 'values' 仅在 if 条件语句中使用。能否请您解释一下,在此先感谢!

def assign(values, s, d):
    """Eliminate all the other values (except d) from values[s] and 
propagate.
     Return values, except return False if a contradiction is 
detected."""
    other_values = values[s].replace(d, '')
    if all(eliminate(values, s, d2) for d2 in other_values):
        return values
    else:
        return False


 def eliminate(values,s,d):
    '''Eliminate d from values[s]; propagate when values or places <=2.
Return values, except return False if a contradiction is detected.'''
    if d not in values[s]:
        return values ## Already eliminated
    values[s] = values[s].replace(d,'')

    if len(values[s]) == 0:
        return False ##Contradiction: removed last value
    elif len(values[s]) == 1:
        d2 = values[s]
        if not all(eliminate(values, s2, d2) for s2 in peers[s]):
            return False

    for u in units[s]:
        dplaces = [s for s in u if d in values[s]]
        if len(dplaces) == 0:
            return False ## Contradiction: no
        elif len(dplaces) == 1:
            # d can only be in one place in unit; assign it there
            if not assign(values,dplaces[0],d):
                return False
    return values

values 更新为 eliminate 的副作用:

values[s] = values[s].replace(d,'')

这将从 valuess 条目中删除所有值 d。参见 replace