이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
김현식
가입: 2017년 9월 5일 올린 글: 24
|
올려짐: 2017년11월15일 13:20 주제: 5-1 질문 |
|
|
for이나 while문과 같은 loop을 짤 때, 이 loop 자체들이 recursive한 성격을 지니고있는데 recursive를 이용하지 않고 코드를 짤 수 있나요?
예를 들어 while문을 if를 이용하여 자기 자신을 다시 호출하니 역시 stack_overflow에러를 띄우네요 ㅜㅜ
그리고 callv에서 Sm5.CALL을 하기 전에 (x,C', E')에서 E'에 자기 자신 f에 대한 것을 저장하는 방식으로 하는게 맞나요? callv에선 함수 이름 f를 받아서 (x,C')에 대한걸 직접적으로 못이용하는데 (x,C', E')에서 E'을 인위적으로 수정하는 방식은 아니죠?
Sm5에서 주어진 연산들을 가지고 생각해보는데 초점을 못 잡겠습니다 ㅜㅜ
방향 제시라도 해주시면 감사하겠습니다^^ |
|
위로 |
|
|
로파스 Site Admin
가입: 2012년 9월 9일 올린 글: 280
|
올려짐: 2017년11월15일 16:59 주제: |
|
|
약간의 힌트를 드리자면 반복문의 경우 loop를 한번 도는 것이 곧 함수호출이라고 이해하시면 길이 보이실 것 같습니다.
두번째 질문은 어떤 부분에서 어려워하시는것인지 잘 이해를 못하겠습니다. 다만 함수를 call할때 현재의 환경을 K에 저장해두었다가 함수호출이 끝나고 다시 해당 환경으로 돌아간다는 개념을 이해하시면 call부분 구현은 크게 어렵지 않으실 것 같습니다.
-조교 드림. |
|
위로 |
|
|
김현식
가입: 2017년 9월 5일 올린 글: 24
|
올려짐: 2017년11월16일 20:51 주제: 5-1 letf / call |
|
|
letf에서 E에 f 자기 자신의 proc (즉, (f, (x,c',E'))) 을 포함하도록 짰는데
callv에서 call 이 끝나기 전에 c'에 call이 또 있는 경우(즉, 재귀함수)에는 callv 명령 내에서 E'에 자기 자신의 f를 추가하는 방법이 잘 안되더라구요...
그래서 제가 잘못 접근하고 있는건지, 어떤 방향으로 callv을 구현해야될지 감이 잘 안잡힙니다 ㅜㅜ |
|
위로 |
|
|
신원준
가입: 2017년 9월 12일 올린 글: 23
|
올려짐: 2017년11월17일 1:39 주제: |
|
|
질문이 조금 감이 안 잡히는 부분이 있지만 도움을 드리자면..
Sm5.CALL 호출 이전에 (x, C', E') 상태에서 E'을 직접 조작하는 건 아마 안 될겁니다.
왜냐면 번역기는 Sm5 기계 상태에 직접 영향을 미칠 수 없기 때문입니다.
번역기는 K-- 명령어들이 순서대로 있는 것을 Sm5 명령어들이 순서대로 있는 걸로 바꾸는 역할밖에 못합니다.
번역기로 기계 상태를 바꾸는 방법은 스펙서에 쓰인 Sm5 명령어들을 이용하는 방법뿐입니다. |
|
위로 |
|
|
로파스 Site Admin
가입: 2012년 9월 9일 올린 글: 280
|
올려짐: 2017년11월17일 12:25 주제: |
|
|
sm5의 call 명령어를 참고하시면, l :: v :: (x, C, E) 이런식으로 스택에
쌓여있는 정보를 바탕으로 함수를 호출하게 됩니다.
callv를 번역하면 sm5명령어들이 여러개 나올텐데요. 아마 아래와 같은 형태겠지요.
push ... :: push ... ::......... :: call
(정답은 이 예시와 다를수있습니다. 설명을 위한 예시로 참고만해주세요.)
그러면 위 명령어들중 push명령어를 통해 l과 v, (x,C,E)등을 스택에 집어넣게 되고 call을 부르겠지요.
이때 (x, C, E)의 E 안에 재귀를 위한 함수의 정보 자체가 들어갈 수 있게 잘 번역해주면 될것입니다.
-조교 드림. |
|
위로 |
|
|
|