커뮤니티

YT 수행모델에 대한 문의

프로필 이미지
su
2014-06-26 01:58:00
163
글번호 76129
답변완료
10개 봉으로된 챠트에 적용한 지표입니다. 첫번째 봉에서는 마치 line 5 에서만 호출된 것처럼 보여주고, 마지막 봉에서는 몰래 line 6, line 7 에서 호출하는 모양입니다. 일반적인 프로그램 수행모델에 따르면 10, 20, ... 100 으로 나와야 하고, YT는 모든 함수호출을 조건에 관계없이 다 수행한다는 수행모델이라하므로 30, 60, ... 300 이 나와야 하는데, 실제 결과가 10, 40, ... 280 입니다. 함수 호출을 모두 수행한다는 것만으로는 프로그램을 작성하는데는 애매모호한 설명입니다. 프로그래머가 출력을 정확히 예측할 수 있도록 매뉴얼을 더 상세하게 하여 애매모호한 점이 없어야 할 것 같읍니다. 출력으로 보아 예상되는 규칙은, 1. 먼저, 일반적인 프로그램처럼 조건에 맞는 수행경로를 따라 수행한다. 2. 다음에, 수행경로에 없던 모든 함수호출들을 나타난 순서에 따라 수행한다. 이런 것 같은데, 이 예상이 맞는 것입니까? 그리고 이것은 일관적으로 항상지켜집니까? 아니면 경우에 따라 다른게 수행되기도 합니까? 함수호출이 프로그램 라인번호에 따라 정확히 그 순서를 지켜서 2번단계가 수행됩니까? 아니면 그 순서를 보장할 수 없읍니까? YT 프로그램 수행모델을 제대로 파악하지 못하면, 그렇지 않아도 일반 프로그램 수행모델에 맞지 않아 프로그램에 어려움이 있는데, 프로그램을 작성하는데 시간낭비가 많을 것같으니, 상세하고 정확히 알려주시면 감사하겠읍니다. 예를 들어 2. 과정에서 함수호출에 사용되는 파라메터값은 1과정을 마친후 최종적으로 확정된 변수들에의해 만들어지는 값으로 호출되는 것입니까? ============ 지표: Input: p(0); Var: par(0); Var: dummy(0); if p == 0 then _func_1("line 5", par); if p == 1 then _func_1("line 6", par); if p == 2 then _func_1("line 7", par); print("_test_1.txt", "index = %.0f; par = %.0f", index, par); ============ 함수: _func_1 Input: line(StringSimple), par(NumericRef); print("_test_1.txt", "_func_1 begin: called from %s: par = %.0f", line, par); par = par + 10; print("_test_1.txt", "_func_1 end: called from %s: par = %.0f", line, par); _func_1 = 1; ============ 출력 2014-06-12 9:00:00 _func_1 begin: called from line 5: par = 0 2014-06-12 9:00:00 _func_1 end: called from line 5: par = 10 2014-06-12 9:00:00 index = 0; par = 10 2014-06-12 9:00:00 _func_1 begin: called from line 6: par = 10 2014-06-12 9:00:00 _func_1 end: called from line 6: par = 20 2014-06-12 9:00:00 _func_1 begin: called from line 7: par = 20 2014-06-12 9:00:00 _func_1 end: called from line 7: par = 30 2014-06-13 9:00:00 _func_1 begin: called from line 5: par = 30 2014-06-13 9:00:00 _func_1 end: called from line 5: par = 40 2014-06-13 9:00:00 index = 1; par = 40 2014-06-13 9:00:00 _func_1 begin: called from line 6: par = 40 2014-06-13 9:00:00 _func_1 end: called from line 6: par = 50 2014-06-13 9:00:00 _func_1 begin: called from line 7: par = 50 2014-06-13 9:00:00 _func_1 end: called from line 7: par = 60 2014-06-16 9:00:00 _func_1 begin: called from line 5: par = 60 2014-06-16 9:00:00 _func_1 end: called from line 5: par = 70 2014-06-16 9:00:00 index = 2; par = 70 2014-06-16 9:00:00 _func_1 begin: called from line 6: par = 70 2014-06-16 9:00:00 _func_1 end: called from line 6: par = 80 2014-06-16 9:00:00 _func_1 begin: called from line 7: par = 80 2014-06-16 9:00:00 _func_1 end: called from line 7: par = 90 2014-06-17 9:00:00 _func_1 begin: called from line 5: par = 90 2014-06-17 9:00:00 _func_1 end: called from line 5: par = 100 2014-06-17 9:00:00 index = 3; par = 100 2014-06-17 9:00:00 _func_1 begin: called from line 6: par = 100 2014-06-17 9:00:00 _func_1 end: called from line 6: par = 110 2014-06-17 9:00:00 _func_1 begin: called from line 7: par = 110 2014-06-17 9:00:00 _func_1 end: called from line 7: par = 120 2014-06-18 9:00:00 _func_1 begin: called from line 5: par = 120 2014-06-18 9:00:00 _func_1 end: called from line 5: par = 130 2014-06-18 9:00:00 index = 4; par = 130 2014-06-18 9:00:00 _func_1 begin: called from line 6: par = 130 2014-06-18 9:00:00 _func_1 end: called from line 6: par = 140 2014-06-18 9:00:00 _func_1 begin: called from line 7: par = 140 2014-06-18 9:00:00 _func_1 end: called from line 7: par = 150 2014-06-19 9:00:00 _func_1 begin: called from line 5: par = 150 2014-06-19 9:00:00 _func_1 end: called from line 5: par = 160 2014-06-19 9:00:00 index = 5; par = 160 2014-06-19 9:00:00 _func_1 begin: called from line 6: par = 160 2014-06-19 9:00:00 _func_1 end: called from line 6: par = 170 2014-06-19 9:00:00 _func_1 begin: called from line 7: par = 170 2014-06-19 9:00:00 _func_1 end: called from line 7: par = 180 2014-06-20 9:00:00 _func_1 begin: called from line 5: par = 180 2014-06-20 9:00:00 _func_1 end: called from line 5: par = 190 2014-06-20 9:00:00 index = 6; par = 190 2014-06-20 9:00:00 _func_1 begin: called from line 6: par = 190 2014-06-20 9:00:00 _func_1 end: called from line 6: par = 200 2014-06-20 9:00:00 _func_1 begin: called from line 7: par = 200 2014-06-20 9:00:00 _func_1 end: called from line 7: par = 210 2014-06-23 9:00:00 _func_1 begin: called from line 5: par = 210 2014-06-23 9:00:00 _func_1 end: called from line 5: par = 220 2014-06-23 9:00:00 index = 7; par = 220 2014-06-23 9:00:00 _func_1 begin: called from line 6: par = 220 2014-06-23 9:00:00 _func_1 end: called from line 6: par = 230 2014-06-23 9:00:00 _func_1 begin: called from line 7: par = 230 2014-06-23 9:00:00 _func_1 end: called from line 7: par = 240 2014-06-24 9:00:00 _func_1 begin: called from line 5: par = 240 2014-06-24 9:00:00 _func_1 end: called from line 5: par = 250 2014-06-24 9:00:00 index = 8; par = 250 2014-06-24 9:00:00 _func_1 begin: called from line 6: par = 250 2014-06-24 9:00:00 _func_1 end: called from line 6: par = 260 2014-06-24 9:00:00 _func_1 begin: called from line 7: par = 260 2014-06-24 9:00:00 _func_1 end: called from line 7: par = 270 2014-06-25 9:00:00 _func_1 begin: called from line 5: par = 270 2014-06-25 9:00:00 _func_1 end: called from line 5: par = 280 2014-06-25 9:00:00 index = 9; par = 280 2014-06-25 9:00:00 _func_1 begin: called from line 6: par = 280 2014-06-25 9:00:00 _func_1 end: called from line 6: par = 290 2014-06-25 9:00:00 _func_1 begin: called from line 7: par = 290 2014-06-25 9:00:00 _func_1 end: called from line 7: par = 300
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-06-26 14:37:03

안녕하세요 예스스탁입니다. 규칙은 말씀하신 1번 2번 과정이 맞습니다. 수행은 항상 수식작성상 위에서 아래로 수행하며 먼저 조건에 맞는 수행경로를 따라 마지막 줄까지 먼저 수행한 이후에 수행경로에 없던 함수를 수식작성상 위에서 아래 순서로 호출을 하게 됩니다. 경우에 따라 다르지는 않습니다. 1 : Input: p(0); 2 : Var: par(0); 3 : Var: dummy(0); 4 : 5 : if p == 0 then _func_1("line 5", par); 6 : if p == 1 then _func_1("line 6", par); 7 : if p == 2 then _func_1("line 7", par); 8 : 9 : print("_test_1.txt", "index = %.0f; par = %.0f", index, par); 먼저 5번이 수행이 되고 6번과 7번은 조건이 맞지 않아 패스한 이후에 9번줄이 수행이 되고 이후에 6번과 7번이 호출되는 내용을 매봉 반복하게 됩니다. 5번 --> 9번 --> 6번 --> 7번 함수의 par가 NumericRef로 이전 해당 함수의 최종값을 인계받는 구조이므로 5번 최종수행값이 6번에 투입되고 6번 최종수행값이 7번에 투입되게 됩니다. 2014-06-12 9:00:00 _func_1 begin: called from line 5: par = 0 2014-06-12 9:00:00 _func_1 end: called from line 5: par = 10 2014-06-12 9:00:00 index = 0; par = 10 2014-06-12 9:00:00 _func_1 begin: called from line 6: par = 10 2014-06-12 9:00:00 _func_1 end: called from line 6: par = 20 2014-06-12 9:00:00 _func_1 begin: called from line 7: par = 20 2014-06-12 9:00:00 _func_1 end: called from line 7: par = 30 2014-06-13 9:00:00 _func_1 begin: called from line 5: par = 30 2014-06-13 9:00:00 _func_1 end: called from line 5: par = 40 2014-06-13 9:00:00 index = 1; par = 40 2014-06-13 9:00:00 _func_1 begin: called from line 6: par = 40 2014-06-13 9:00:00 _func_1 end: called from line 6: par = 50 2014-06-13 9:00:00 _func_1 begin: called from line 7: par = 50 2014-06-13 9:00:00 _func_1 end: called from line 7: par = 60 2014-06-16 9:00:00 _func_1 begin: called from line 5: par = 60 2014-06-16 9:00:00 _func_1 end: called from line 5: par = 70 2014-06-16 9:00:00 index = 2; par = 70 2014-06-16 9:00:00 _func_1 begin: called from line 6: par = 70 2014-06-16 9:00:00 _func_1 end: called from line 6: par = 80 2014-06-16 9:00:00 _func_1 begin: called from line 7: par = 80 2014-06-16 9:00:00 _func_1 end: called from line 7: par = 90 ... 즐거운 하루되세요 > su 님이 쓴 글입니다. > 제목 : YT 수행모델에 대한 문의 > 10개 봉으로된 챠트에 적용한 지표입니다. 첫번째 봉에서는 마치 line 5 에서만 호출된 것처럼 보여주고, 마지막 봉에서는 몰래 line 6, line 7 에서 호출하는 모양입니다. 일반적인 프로그램 수행모델에 따르면 10, 20, ... 100 으로 나와야 하고, YT는 모든 함수호출을 조건에 관계없이 다 수행한다는 수행모델이라하므로 30, 60, ... 300 이 나와야 하는데, 실제 결과가 10, 40, ... 280 입니다. 함수 호출을 모두 수행한다는 것만으로는 프로그램을 작성하는데는 애매모호한 설명입니다. 프로그래머가 출력을 정확히 예측할 수 있도록 매뉴얼을 더 상세하게 하여 애매모호한 점이 없어야 할 것 같읍니다. 출력으로 보아 예상되는 규칙은, 1. 먼저, 일반적인 프로그램처럼 조건에 맞는 수행경로를 따라 수행한다. 2. 다음에, 수행경로에 없던 모든 함수호출들을 나타난 순서에 따라 수행한다. 이런 것 같은데, 이 예상이 맞는 것입니까? 그리고 이것은 일관적으로 항상지켜집니까? 아니면 경우에 따라 다른게 수행되기도 합니까? 함수호출이 프로그램 라인번호에 따라 정확히 그 순서를 지켜서 2번단계가 수행됩니까? 아니면 그 순서를 보장할 수 없읍니까? YT 프로그램 수행모델을 제대로 파악하지 못하면, 그렇지 않아도 일반 프로그램 수행모델에 맞지 않아 프로그램에 어려움이 있는데, 프로그램을 작성하는데 시간낭비가 많을 것같으니, 상세하고 정확히 알려주시면 감사하겠읍니다. 예를 들어 2. 과정에서 함수호출에 사용되는 파라메터값은 1과정을 마친후 최종적으로 확정된 변수들에의해 만들어지는 값으로 호출되는 것입니까? ============ 지표: Input: p(0); Var: par(0); Var: dummy(0); if p == 0 then _func_1("line 5", par); if p == 1 then _func_1("line 6", par); if p == 2 then _func_1("line 7", par); print("_test_1.txt", "index = %.0f; par = %.0f", index, par); ============ 함수: _func_1 Input: line(StringSimple), par(NumericRef); print("_test_1.txt", "_func_1 begin: called from %s: par = %.0f", line, par); par = par + 10; print("_test_1.txt", "_func_1 end: called from %s: par = %.0f", line, par); _func_1 = 1; ============ 출력 2014-06-12 9:00:00 _func_1 begin: called from line 5: par = 0 2014-06-12 9:00:00 _func_1 end: called from line 5: par = 10 2014-06-12 9:00:00 index = 0; par = 10 2014-06-12 9:00:00 _func_1 begin: called from line 6: par = 10 2014-06-12 9:00:00 _func_1 end: called from line 6: par = 20 2014-06-12 9:00:00 _func_1 begin: called from line 7: par = 20 2014-06-12 9:00:00 _func_1 end: called from line 7: par = 30 2014-06-13 9:00:00 _func_1 begin: called from line 5: par = 30 2014-06-13 9:00:00 _func_1 end: called from line 5: par = 40 2014-06-13 9:00:00 index = 1; par = 40 2014-06-13 9:00:00 _func_1 begin: called from line 6: par = 40 2014-06-13 9:00:00 _func_1 end: called from line 6: par = 50 2014-06-13 9:00:00 _func_1 begin: called from line 7: par = 50 2014-06-13 9:00:00 _func_1 end: called from line 7: par = 60 2014-06-16 9:00:00 _func_1 begin: called from line 5: par = 60 2014-06-16 9:00:00 _func_1 end: called from line 5: par = 70 2014-06-16 9:00:00 index = 2; par = 70 2014-06-16 9:00:00 _func_1 begin: called from line 6: par = 70 2014-06-16 9:00:00 _func_1 end: called from line 6: par = 80 2014-06-16 9:00:00 _func_1 begin: called from line 7: par = 80 2014-06-16 9:00:00 _func_1 end: called from line 7: par = 90 2014-06-17 9:00:00 _func_1 begin: called from line 5: par = 90 2014-06-17 9:00:00 _func_1 end: called from line 5: par = 100 2014-06-17 9:00:00 index = 3; par = 100 2014-06-17 9:00:00 _func_1 begin: called from line 6: par = 100 2014-06-17 9:00:00 _func_1 end: called from line 6: par = 110 2014-06-17 9:00:00 _func_1 begin: called from line 7: par = 110 2014-06-17 9:00:00 _func_1 end: called from line 7: par = 120 2014-06-18 9:00:00 _func_1 begin: called from line 5: par = 120 2014-06-18 9:00:00 _func_1 end: called from line 5: par = 130 2014-06-18 9:00:00 index = 4; par = 130 2014-06-18 9:00:00 _func_1 begin: called from line 6: par = 130 2014-06-18 9:00:00 _func_1 end: called from line 6: par = 140 2014-06-18 9:00:00 _func_1 begin: called from line 7: par = 140 2014-06-18 9:00:00 _func_1 end: called from line 7: par = 150 2014-06-19 9:00:00 _func_1 begin: called from line 5: par = 150 2014-06-19 9:00:00 _func_1 end: called from line 5: par = 160 2014-06-19 9:00:00 index = 5; par = 160 2014-06-19 9:00:00 _func_1 begin: called from line 6: par = 160 2014-06-19 9:00:00 _func_1 end: called from line 6: par = 170 2014-06-19 9:00:00 _func_1 begin: called from line 7: par = 170 2014-06-19 9:00:00 _func_1 end: called from line 7: par = 180 2014-06-20 9:00:00 _func_1 begin: called from line 5: par = 180 2014-06-20 9:00:00 _func_1 end: called from line 5: par = 190 2014-06-20 9:00:00 index = 6; par = 190 2014-06-20 9:00:00 _func_1 begin: called from line 6: par = 190 2014-06-20 9:00:00 _func_1 end: called from line 6: par = 200 2014-06-20 9:00:00 _func_1 begin: called from line 7: par = 200 2014-06-20 9:00:00 _func_1 end: called from line 7: par = 210 2014-06-23 9:00:00 _func_1 begin: called from line 5: par = 210 2014-06-23 9:00:00 _func_1 end: called from line 5: par = 220 2014-06-23 9:00:00 index = 7; par = 220 2014-06-23 9:00:00 _func_1 begin: called from line 6: par = 220 2014-06-23 9:00:00 _func_1 end: called from line 6: par = 230 2014-06-23 9:00:00 _func_1 begin: called from line 7: par = 230 2014-06-23 9:00:00 _func_1 end: called from line 7: par = 240 2014-06-24 9:00:00 _func_1 begin: called from line 5: par = 240 2014-06-24 9:00:00 _func_1 end: called from line 5: par = 250 2014-06-24 9:00:00 index = 8; par = 250 2014-06-24 9:00:00 _func_1 begin: called from line 6: par = 250 2014-06-24 9:00:00 _func_1 end: called from line 6: par = 260 2014-06-24 9:00:00 _func_1 begin: called from line 7: par = 260 2014-06-24 9:00:00 _func_1 end: called from line 7: par = 270 2014-06-25 9:00:00 _func_1 begin: called from line 5: par = 270 2014-06-25 9:00:00 _func_1 end: called from line 5: par = 280 2014-06-25 9:00:00 index = 9; par = 280 2014-06-25 9:00:00 _func_1 begin: called from line 6: par = 280 2014-06-25 9:00:00 _func_1 end: called from line 6: par = 290 2014-06-25 9:00:00 _func_1 begin: called from line 7: par = 290 2014-06-25 9:00:00 _func_1 end: called from line 7: par = 300