게시판 인덱스

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

[숙제 4] Record의 Equality

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



가입: 2026년 3월 4일
올린 글: 9
위치: 대한민국 서울

올리기올려짐: 2026년4월15일 1:21    주제: [숙제 4] Record의 Equality 인용과 함께 답변

안녕하세요,

Record는 structural equality로 확인한다고 하셨는데, 이와 관련해 질문 드립니다.

1. k-.pdf 상에서 어떤 메모리로 equality를 확인하는지가 불분명합니다.
를 이용한다고 생각하면 될까요?

2. 무한히 재귀적인 record에서 equality는 어떻게 정의되나요?
예컨대 아래 코드의 실행 결과는 "1\n1\n1\n"이 되어야 하나요?

코드:
let r1 := {next := {}} in
let r2 := {next := {}} in
let r3 := {next := {}} in
r1.next := r2;
r2.next := r3;
r3.next := r2;
write(if r1 = r1 then 1 else 0);
write(if r1.next = r1 then 1 else 0);
write(if r1 = r2 then 1 else 0)


r1 = r1은 어느 면으로 보나 참이어야 하고,
r1.next = r1은 조금 어색하지만 무한히 긴 리스트이므로 참이라고 생각됩니다.
마지막은 양쪽이 다 가능해 보입니다.
인용:

레코드가 같은지 비교할 때에는 구조가 재귀적으로 같은지(structural equality) 확인합니다. 즉 r1, r2이 같은 field를 갖고 있고, 각 field의 값이 서로 같을 때 r1과 r2는 같다고 합니다.

이 정의를 충실히 따른다면 r1과 r2는 같은 field인 next를 갖고 있고, 그 값인 r1과 r3가 같은지 보아야 합니다. r1과 r3는 같은 field인 next를 갖고 있고, 그 값인 r1과 r2가 같은지 보아야 합니다. 이것이 무한히 반복되므로 r1 = r2는 참입니다.

그러나 아래의 두 조작을 가했을 때 나타나는 결과는 다릅니다. r1.next.next = {} 이후에 r1은 {next := {}}이 되지만, r2.next.next = {} 이후에 r2는 {next := {next := {}}이 됩니다. 조작을 가한 결과가 다르므로 두 record의 "구조가 다르다"고 볼 수도 있습니다.

equality의 의미를 보다 엄밀하게 정의해주실 수 있을까요?

감사합니다.

이상규 올림
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
안중원
Site Admin


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

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

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

1. 두 레코드가 같은지 비교하는 경우, 두 레코드가 모두 계산된 후의 M2를 기준으로 비교합니다.

2. 비교하고자 하는 양쪽 레코드가 무한한 경우에는 'e1 = e2' 식의 의미가 정의되지 않는 것으로 합니다. 이는 무한반복하는 while의 의미가 정의되지 않는 것과 비슷합니다.

다만 이렇게 무한반복에 빠지는 프로그램은 채점에 포함하지 않으니 실행기를 구현하실 때에는 고려하지 않으셔도 됩니다. 숙제2에서 K-로 프로그램을 작성할 때에도 두 무한한 레코드를 비교하는 로직이 포함되지 않도록 해주셔야 합니다.

감사합니다.
_________________
TA 안중원
TA e-mail: ta310@ropas.snu.ac.kr
personal e-mail: jwahn@ropas.snu.ac.kr
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 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