게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

[숙제 4] 1번 syntax 질문

 
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Spring 2026)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
최정원



가입: 2025년 3월 22일
올린 글: 17

올리기올려짐: 2026년4월17일 13:07    주제: [숙제 4] 1번 syntax 질문 인용과 함께 답변

안녕하세요, 숙제 4의 K- 언어 구현에 대해 질문이 있어 여쭤봅니다.

1. CALL V에서 mem.store과 env.bind를 각각 두 번, 세 번 연속해서 적용하는 것 같은데, 혹시 적용하는 순서는 왼쪽부터 오른쪽 순이라고 생각하면 될까요?

2. CALL V, CALL R에서 expression list가 인자로 입력되는데, 이때 입력은 각각 [e1;e2]와 [x;e;y] 라고 생각해도 되나요? 혹은 CALLR의 경우 [x;(e, y)]라고 생각해야 하나요?

4. 만약 위 질문과 같이 CALLR 에서 expression list 가 x, field(e.y) 두 개라면, CALL R 의 경우 두 번째 항목에서 filed가 들어오지 않는다면 오류를 내도 되나요?

5. 현재 k— pdf의 semantics에는 마치 Record, Proc, Callv, Callr에 변수가 두 개씩만 들어오는 것처럼 되어 있습니다. 예를 들어 LetProc은 let proc f(x1, x2) = e in e1이라고 되어 있습니다. CallV도 f(x1, x2)가 예시고 CallR 은 f<x, e.y>입니다. 그러나 위쪽 Syntax에 보면

인용:
Notation: α∗
indicates zero or finite sequence of α’s seperated by β. For
example, x∗
, indicates the empty string or “x” or “x, x” or “x, x, x” etc.


라고 되어 있는데, 예시로 아래 리스트가 두 개일 때만 보여주신 거고 실제로는 리스트가 훨씬 길 수도 있을까요? 예를 들어 CallV에서 f(e1, e2)의 경우만 보여주셨는데, 실제로는 f(e1, e2, …, en)까지 가능한 걸까요? Semantics에 있는 모습 곧이곧대로 프로그래밍 해야 할지 (리스트 길이가 두 개라고 생각), process와 record에 리스트가 두 개보다 훨씬 길다고 생각하고 만들어야할지 궁금합니다. 또한, 빈 레코드는 어떻게 표현하면 되는지 알고 싶습니다. {}

감사합니다!
위로
사용자 정보 보기 비밀 메시지 보내기
안중원
Site Admin


가입: 2023년 3월 13일
올린 글: 52

올리기올려짐: 2026년4월17일 15:07    주제: 인용과 함께 답변

안녕하세요, 조교 안중원입니다.

1. 변수 및 주소를 추가하는 순서는 규칙에 나와있듯 왼쪽에서 오른쪽으로 진행합니다.

2. 숙제 보충설명에 나와있듯 0 이상의 유한한 정수 개수의 인자를 처리하도록 구현하여야 합니다. 또, K- 식 f <x, e.y>는 ocaml 값으로는 CALLR ("f", [VAR "x"; FIELD (e, "y")])와 같이 들어옵니다.

4. CALLR의 인자에 VAR이나 FIELD가 아닌 식이 들어오는 경우는 고려하지 않으셔도 됩니다. 실제 구현에서는 예외를 내도록 처리하셔도 되겠습니다. 2번 문제에서 제출하시는 K- 코드에도 PDF에 나와있는 문법에 맞는 코드만을 포함하셔야 합니다.

5. 웹보드의 숙제 공지글에 포함된 보충설명을 읽고 숙제를 진행해주세요.

감사합니다.
_________________
TA 안중원
TA e-mail: ta310@ropas.snu.ac.kr
personal e-mail: jwahn@ropas.snu.ac.kr
위로
사용자 정보 보기 비밀 메시지 보내기
최정원



가입: 2025년 3월 22일
올린 글: 17

올리기올려짐: 2026년4월17일 16:42    주제: 인용과 함께 답변

답변 감사드립니다!

2번의 경우 k--.pdf 예시는 하나만 call 된 경우고 여러 개라면 CALLR ("f", [[VAR "x"; FIELD (e, "y")];[VAR "x1"; FIELD (e1, "y1")];[VAR "x2"; FIELD (e2, "y2")] ... ; [VAR "xn"; FIELD (en, "yn")]])과 같이 들어오나요 CALLR ("f", [VAR "x"; FIELD (e, "y");VAR "x1"; FIELD (e1, "y1");VAR "x2"; FIELD (e2, "y2")]... ;VAR "xn"; FIELD (en, "yn")])과 같이 들어오나요?

또한 공지를 읽은 후에도 빈 Record가 들어왔을 때에 어떻게 처리해야 할지 잘 모르겠습니다. 리스트이므로 그냥 Record []로 하면 될까요? 또한, variable (id) list가 빈 리스트로 입력된 경우는 바인드할 게 없으므로 Unbound error을 내면 되는지 궁금합니다.
위로
사용자 정보 보기 비밀 메시지 보내기
최정원



가입: 2025년 3월 22일
올린 글: 17

올리기올려짐: 2026년4월17일 20:22    주제: 인용과 함께 답변

1. 추가로 계속 여쭤봐서 죄송한데, CALL R의 경우 처음 σ(f)를 부를 때 id list 가 예시의 [x1, x2] 보다 더 길 수도 있는 것으로 알고 있습니다. 즉, f가 어떻게 만들어졌느냐에 따라 [x1]일 수도 있고 [x1, x2, ..., xn]일 수도 있는 것 같습니다. 그러나 x1과 x2의 경우 다른 방식으로 처리하는 것 같아, 예시보다 id list가 더 길거나 짧을 때 어떻게 처리하면 될지 알고 싶습니다.

아래와 같이 x1 은 {x1 |→ σ(x)}로 x2는 {x2 |→ r(y)}로 처리됩니다. 이는 ID list가 항상 짝수이고, 홀수번째 x가 항상 {x1 |→ σ(x)}와 같이 짝수번재 x가 항상 {x2 |→ r(y)}와 같이 처리된다는 말씀일까요? 혹은 id list의 맨 처음 원소만 {x1 |→ σ(x)}처럼 적용되고 나머지는 모두 {x2 |→ r(y)}처럼 되는 것일까요?

인용:
σ(f) = <[x1, x2], e′, σ′> let = p
σ,M ⊢ e ⇓ r,M1
σ′{x1 |→ σ(x)}{x2 |→ r(y)}{f |→ p},M1 ⊢ e′ ⇓ v′,M′


2. CallV, CallR 모두 σ와 σ'를 사용합니다. 한 exprression 혹은 field에 대해 처리를 할 때마다 σ와 σ'를 따로 분리해서 사용한다고 생각해야 할까요? 즉, update된 σ'를 다음 처리할 때 쓰는 σ로 넘겨주는지, 항상 σ와 σ'를 따로따로 update해야 하는지 알고 싶습니다.

긴 질문들 세심히 답변주셔서 감사합니다!
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Spring 2026) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay