Peter Norvig a un texte décrivant un programme pour résoudre les puzzles de sudoku, même les plus difficiles, en combinant déterministe des opérations logiques et intelligents de la traversée de la solutions possibles. Celui-ci est réalisé de manière récursive; voici que la fonction (source):
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]
)
(J'ai ajouté des espaces, des CRs, et des onglets pour le plaisir de mes yeux; des excuses à M. Norvig.)
Juste en dessous du commentaire il y a une ligne commençant par "_,s
". Qui semble être l'déballé n-uplet (len(values[s]),s
) à la valeur minimale de l' s
. Est Dr Norvig à l'aide de "_
" comme un nom de variable juste pour indiquer qu'il est un "don't care", ou quelque chose d'autre à faire? Quelles sont les situations où "_
" est recommandé qu'un nom de variable? En mode interactif, "_
" détient la réponse de l'opération précédente; est-il une fonction similaire dans les non-interactive code?
Mise à jour
Merci pour les bonnes réponses. Je suppose que La Réponse va à Alex Martelli pour "valeur ajoutée"; il souligne que le "_, vbl_of_interest" l'idiome est souvent un effet secondaire de la DSU idiome, qui lui-même a été faite en grande partie inutiles.