 |
|
| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
윤소영
가입: 2024년 3월 20일 올린 글: 4
|
올려짐: 2024년5월25일 1:23 주제: [hw 7-2] 문법 질문 |
|
|
안녕하세요, 과제 7-2에서
| 코드: | (* Public testcase 7 : Toy with 'raise' function *)
(
(fn error =>
(fn x =>
ifp x then
error 1
else
error 2
) 5
) (fn x => raise x)
) handle a a
(* Output : 1 *)
| 다음과 같은 예제에서 raise x를 x로 변환하여 아래와 같이 나타낼 수 있습니다.
| 코드: | (
(fn error =>
(fn x =>
ifp x then
error 1
else
error 2
) 5
) (fn x => x)
) handle a a
(* Output : 1 *)
| 이 경우 exep Interpreter에서 TypeError("not a function")가 발생합니다. parser를 완벽히 뜯어보지 않아서 정확히는 모르겠으나 아래와 같이 바꾸면 잘 실행됩니다.
| 코드: | (
(fn error =>
(fn x =>
ifp x then
(error 1)
else
(error 2)
) 5
) (fn x => x)
) handle a a
(* Output : 1 *)
| 제 코드의 경우 fn x => raise x에 대해 error 1의 경우 TypeError가 발생하나 (error 1)의 경우 잘 작동합니다. Interpreter가 잘 작동하는 경우에도 TypeError가 발생하여도 되는지, 모호한 문법이 들어오지 않는지, 왜 이런 문제가 생기는지 알고 싶습니다.
추가적으로 function과 recursive function의 경우 expression을 인자로 가짐에도 상수로 취급하여도 되는지에 대해서도 질문드립니다.
감사합니다. |
|
| 위로 |
|
 |
이재호 Site Admin
가입: 2022년 3월 6일 올린 글: 209
|
올려짐: 2024년5월25일 22:00 주제: |
|
|
안녕하세요,
말씀주신 대로 함수에 인자를 적용할 때는 (현재 파서 구현에서는) `(error 1)`과 같이 괄호를 붙여주어야 저희가 평소에 쓰는 언어에서처럼 파싱이 됩니다.
지금은 (아쉽게도)
| 코드: | ((fn error => (fn x => (ifp x then
(error) (1)
else
error) (2)) (5)) (fn x => raise (x))) handle a (a) |
처럼 파싱이 되는 상태이고, 그렇기 때문에 `error`가 `raise`를 할 때만 잘 작동했던 것입니다.
다만 여러분이 구현을 하실 때는 이미 파싱된 문법 나무를 받아와 작성하시기 때문에 논리 상 문제는 없고, 테스트할 때도 정해진 테스트 코드에 대해 확인하므로 모호한 부분은 없습니다.
작성하신 코드의 파싱이 어떻게 되는지 확인하고 싶으시면 빌드된 실행 파일에 `-pp` 옵션을 붙여서 확인해보면 됩니다.
두 번째 질문 "추가적으로 function과 recursive function의 경우 expression을 인자로 가짐에도 상수로 취급하여도 되는지에 대해서도 질문드립니다."은 잘 이해하지 못하였습니다. expression을 인자로 가진다는 것이 어떤 의미이신가요? 그리고 상수로 취급하신다는 것이 어떤 말씀이신가요?
감사합니다.
조교 드림
TA 이재호
e-mail: jhlee@ropas.snu.ac.kr |
|
| 위로 |
|
 |
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|