2016-10-24 4 views

답변

1

당신은 (또한 : 고전 ATS 스타일) 이전 DIY 스타일을 사용할 수 있습니다, 즉 꼬리 재귀 함수를 사용하여, 말을하는 것입니다. 다음 예는 다음과 같습니다

extern 
fun 
process (x: int): void 
fun 
loop {n:int} (xs: list(int, n)): void = 
    case+ xs of 
    | list_nil() =>() 
    | list_cons (x, xs1) => let 
    val() = process (x) 
    in 
    loop (xs1) 
    end 
// end of [loop] 

당신은 내가 같은 ATSLIB 같은 라이브러리에서 제공하는 연결자 또는 템플릿 함수 중 어느 것도 귀하의 경우에 적합하지 않는 경우이 방법이 바람직하다고 생각 전체 코드 online

를 실행할 수 있습니다.

0

(a list0 -value 용) 연결자 기반 솔루션 : ATS에서

(xs).foreach()(lam x => process(x)) 

, foreach 순차적 탐색 어떤 형태 않는 많은 기능을 오버로드된다.

각 요소의 위치가 필요한 경우도 iforeach 있습니다 :

(xs).iforeach()(lam (i, x) => process(i, x)) 
0

이 하나가되지 않도록 할 필요가있는 가난한 솔루션입니다!

함수 프로그래밍 초보자는 종종 심볼을 오버로드하는 함수를 사용하여 순회를 나열합니다.

(length(xs)).foreach()(lam i => process(xs[i])) // O(n^2)-time 

이 매우 비효율적이다 : 예를 들어, 다음 줄이 무엇을 어느 정도 수행하는 코드를보고 매우 일반적입니다. 루프 안에 list_get_at을 호출하는 것은 거의 항상 나쁜 생각입니다!

관련 문제