2014-04-24 3 views
0
def accumulate(fn, initial, seq): 
    if seq ==(): 
     return initial 
    else: 
     return fn(seq[0], accumulate(fn, initial, seq[1:])) 

accumulate을 사용하면 정렬 기능을 작성한다고 가정합니다.누적 기능을 사용하여 목록 정렬 (고차 함수)

def insertion_sort_hof(tup): 
    return accumulate(lambda x,y: x,y = y,x if x > y else None ,() ,tup) 

이것은 내 코드이며 실행할 수없는 것 같습니다. 왜 ?

insertion_sort_hof(()) #() 
insertion_sort_hof((19,10,1,4,3,1,3, 2)) #(1, 1, 2, 3, 3, 4, 10, 19) 
+0

어떻게 작동하지 않습니까? 어떤 오류가 발생합니까? – Hamatti

+0

'나는 그것을 실행할 수없는 것 같습니다. '당신은 무엇을 의미합니까? 그 기능을 부르셨습니까? – SethMMorton

+1

키워드 뒤에 arg가 아닌 키워드 arg – user3398505

답변

1

람다에는 할당이 포함될 수 없으므로 람다가 유효하지 않습니다. 다음과 같이 괄호를 추가하는 시도하고 당신은 그 효과에 오류 메시지가 나타납니다 :

lambda x,y: (x,y) = (y,x) if x > y else None 

그리고 당신은 단지 그 함수에 로컬로 값을 교환 할 것 때문에 그것은 어쨌든 작동하지 않을 것입니다.

+0

TypeError : 정렬 할 수없는 유형 : int()> tuple(), nope가 작동하지 않습니다. – user3398505

+0

내가 말했듯이. 귀하의 모든 접근법에 결함이 있습니다. 다시 생각해 봐야합니다. – ooga

+0

@ user3398505 unorderable types 오류는 내장 순서가없는 데이터, 즉 '0'또는 '[hat', 'balloon']'이 먼저 오는 데이터를 정렬하려고한다는 것을 의미합니다. 당신이 그것을 볼 때, 당신은 스스로에게 물어야합니다. "나는 무엇을하려고합니까?" 입력 데이터가 일정하지 않기 때문입니다. – SethMMorton