2012-03-14 4 views
0

다음 C 코드를 TCL로 변환하려고합니다.TCL의 두 변수가있는 루프

int a[10],b[10]; 
int n=20 

for (i=1,j=1; i<=n; i+=2,j++) 
{ 
    b[j]=a[i]; 
} 

내가 TCL에 루프이을 변경해야합니다, 나는 루프 구조를위한 TCL 두 루프 변수는 수 있습니까 ... TCL의 foreach는 기능을 사용하지 않으 ???

+1

실제 코드가 아닙니다. 배열의 끝에서부터 읽는 것은 나쁜 생각입니다. –

+0

은 실제 코드가 아니므로 []의 첫 번째 요소를 b []에 할당하고 []의 두 번째 요소를 무시하고 []의 세 번째 요소를 다시 b []에 할당하는 것과 같습니다. a []의 인접 요소를 b []에 대입합니다. – user1270123

+0

그것은 []의 홀수 위치를 b []에 할당하는 것과 비슷합니다. – user1270123

답변

4

는 당신은 discussion here 본 적이 :

set n 6 
    for { 
       set i  1 
       set j  1 
      } { 
       $i < $n 
      } { 
       incr i 
       incr j 
      } { 
       puts "$i $j" 
    } 
+4

+1. 좀 더 간결한 모양을 만들기 위해 개행 문자 대신 세미콜론을 사용할 수 있습니다 : for {set i 1; 집합 j 1} {$ i <$ n} {incr i; incr j} {...}' –

2

이 당신이 찾고,하지만 당신은 시작하는 대상 배열이 필요 위치를 C에서오고있어 고려하고 정확하게 달성하지 않습니다. .. 그것은 당신의 실제 목표를 달성 할 수도 있습니다.

루프 foreach 루프는 저장 변수로 이름 목록을 취할 수 있습니다. 각 이름은 입력 목록의 값 중 하나를 가져옵니다. 따라서, 사용자가 입력 목록에서 때마다 여러 값을 반복하는 데 사용할 수 있습니다 :

set result {} 
foreach {x1 x2} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20} { 
    lappend result $x1 
} 
puts $result 
# 1 3 5 7 9 11 13 15 17 19 

문제에 완전히 관련이없는, 또한 좋은를 너무 여러 변수의 이름과 목록을 취할 수 있다는 것입니다 :

set result {} 
foreach {a1 a2} {1 2 3 4 5 6} b {A B C} { 
    lappend result $a1 $b $a2 - 
} 
puts $result 
# 1 A 2 - 3 B 4 - 5 C 6 
관련 문제