2015-02-06 10 views
1

나는 파이썬에서 스도쿠를 this 웹 사이트에서 푸는 것을 이해하려고합니다. 나는 "검색"기능 특히 "검색"에서 "일부"기능의 응용 프로그램을 이해할 수 없었다. (즉 사각형의 가능한 값의 문자열 : 각각 제곱 값의 이름 키)를 search의 입력파이썬에서 함수의 입력 매개 변수로 루프를 사용합니다.

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 
n,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]) 

def some(seq): 
    "Return some element of seq that is true." 
    for e in seq: 
     if e: return e 
    return False 

values는 사전이다. search에서 우리는 하나의 사각형 (스퀘 쿠 (Sudoku)에서 하나의 숫자를 나타내는 자리 표시 자임)을 찾으려고 시도합니다.이 사각형에는 가능한 값의 수가 적습니다. 그런 다음 각 값에 대해 assign 함수가 호출됩니다. assign의 출력은 false이거나 새 사전 values이 될 수 있습니다. 나는 여기서 "어떤"기능의 목적이 무엇인지 궁금하다.

답변

2

이 제품 :

search(assign(values.copy(), s, d)) 
for d in values[s] 

재귀 values[s] 유효 각각의 가능한 값 search를 호출 발전기 표현이다. 그것은 우리에게 많은 결과를 줄 것입니다 - 각각 d in values[s]에 하나. 각 결과는 사전 (yay success) 또는 False (boo, failure) 중 하나입니다.

무엇이 some일까요? 그룹에서 첫 번째 성공 사례 만 선택하면됩니다. 그렇지 않은 경우 False을 반환합니다.

논리적으로 동등한 접근 방법은 다음과 같습니다

for d in values[s]: 
    e = search(assign(values.copy(), s, d)) 
    if e: return e 
return False 
관련 문제