2013-10-12 3 views
0

나는 for : int * int * (int -> unit) -> unit 기능을 찾고 있습니다. 숫자 목록을 인쇄하려면이 코드가 필요합니다. 더 구체적으로 말해서, 나는 f num = print ((Int.toString num)^"\n") 함수를 가지고있다. 지금까지 이걸 가지고 있습니다 :Int 단위 유형 목록에

fun for(from,to,f)= 
     if from=to then [f(to)] 
     else f(from)::for(from+1,to,f) 

이 경우 반환 유형은 unit list입니다. 이전 결과를 추가하지 않고 어떻게 함수를 호출 할 수 있습니까?

+0

어 그리 게이터와 함께 내부 기능을 사용 하시겠습니까? – Ashalynd

+0

나는 그것을 시험해 보았다. 여전히 각 숫자에 f를 적용하고 있으며 이전 결과에 계속 추가되므로 단위 목록 유형이 제공됩니다. 아니면 뭔가 다른 의미가 있니? – Krishna

+0

나는 다음과 같은 것을 의미했다 : (나는 sml에서 프로가 아니지만 모든 func 언어에서 똑같은 방식으로 작동한다.) 'fun forinner (from, to, f, acc) = from = ~ then acc else forinner (from 1, to, f, f (from) :: acc) ' – Ashalynd

답변

1

()으로 돌아가려면 f의 마지막 호출에서 ()then 브랜치의 호출이 필요합니다. 당신이이 일을, 만 두 번째 문제의 결과를 반환 할 때마다

는 일반적으로, 말하기, 다음과 같은 구문을 사용합니다 예를 들어

(thing1;thing2) 

을 :

(print "foo\n"; 2 + 3); 

인쇄시겠습니까 문자열 "foo \ n"을 빼고 5을 반환하십시오.

이제 코드의 두 가지 부분을 살펴 보겠습니다. then 지점에서

fun for (from,to,f) = if from = to 
         then ... 
         else ... 

, 우리는 단순히 tof를 호출합니다. f 이미 ()를 반환, 그래서 우리는 결과보다 아무것도하지 않습니다

fun for (from,to,f) = if from = to 
         then f to 
         else ... 

다른 지점은 약간 더 복잡하다. 우리는에서 f를 호출하고, 재귀 호출을하고 싶습니다.

fun for (from,to,f) = if from = to 
         then f to 
         else (f from;for (from+1,to,f)); 

또 다른 일을 : 그것이 우리가 반환 할 것을, 그래서 재귀 호출의 반환 유형은 unit 당신이이 작업을 수행하면 어떻게됩니까?

for (4,3,f) 
+0

감사! plain ol '; 허 .. – Krishna

관련 문제