 |
|
| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
최정원
가입: 2025년 3월 22일 올린 글: 12
|
올려짐: 2026년3월13일 14:46 주제: [숙제 1] 2번 3번 5번 7번 관련 질문 |
|
|
안녕하세요, 숙제 1의 문제 2, 3, 5, 7번과 관련하여 질문드리고 싶습니다.
1. 모든 문제에 대해 새로운 보조 함수를 써도 되나요? 예를 들어 5번의 eval 함수를 구현할 때, eval 내에서만 사용하는 function을 같은 파일에 써도 될까요?
2. OCAML 공식 라이브러리 홈페이지와 매뉴얼에 있다면 튜토리얼 슬라이드에 설명해주시지 않은 모듈 함수나 연산자들도 사용할 수 있나요?
3. 5번에서 ANDALSO 는 논리식 측면에서 AND, ORELSE는 OR로 생각하면 될까요? 추가로, IMPLY의 경우 숙제 공지를 읽고도 조금 헷갈립니다. IMPLY (f1, f2)라면, f1이 참이면 f2가 참 거짓인지 상관 없이 무조건 참을 반환하고 f1가 거짓이면 무조건 거짓을 반환하는 것인가요? 아니면 f1이 참이면 f2의 참 거짓 여부(f2 의 결과)를 그대로 반환하는 것인가요?
4. 5번에서 LESS는 f1 < f2를 만족하면 참을 반환, 나머진 거짓일까요?
5. 2번 문제의 예시에서 함수를 반복해서 적용한다는 것에 대해 여쭤보고 싶습니다. 예를 들어 f(x) = x + 2 를 3번 반복하면, 결과적으로 f(f(f(x)))를 iter 함수가 돌려준다는 것인가요? 즉, 저희가 손으로 풀 때 f(f(f(0))) = f(f(2)) = f(4) = 6 처럼 생각해도 되는 것인지 알고 싶습니다.
6. 2번 문제에서 함수 → 함수 를 돌려주는 함수를 구현하려 할 때 항상 error가 떠서 문의드립니다. Ocaml에서 함수를 받는 함수를 iter의 두 번째 인자로 받게 하려 하면, 입력 함수와 출력함수를 동일하게 취급하지 않는 것 같습니다. 즉, f 는 'a -> 'a 타입이지만, f 가 함수를 재귀적으로 인자로 받을 수 있게 코드를 쓰자마자 입력되는 f의 타입은 ('a -> 'a) -> 'a -> 'a가 됩니다. '함수' -> '함수' = (('a -> 'a) -> 'a -> 'a)와 '임의 타입' -> '임의 타입 ' = ('a -> 'a)가 ocaml에서 컴파일은 되지만 다르게 인식되는 것 같습니다. 이는 f를 명시적으로 'a -> 'a만 될 수 있게 만들어도 동일합니다. 그래서 f: int -> int와 같은 함수들은 재귀적으로 함수를 적용받지 못해 iter의 인자로 받을 수 없는 것 같습니다. 함수 -> 함수는 'a -> 'a로 표현하는 것이 불가능한가요? 혹은 제가 문제의 요구사항을 완전히 다르게 이해했는지 알고 싶습니다.
7. 2번의 identity 함수는 저희가 직접 만들어야 하는지 ocaml에 공식적으로 있는 것인지 궁금합니다.
8. 2번 문제 예시에서 "iter(n, function x -> 2+x) 0"의 마지막 0을 iter 함수의 세 번째 인자로 생각하고 구현해도 될까요? iter함수가 인자로 n 과 f 딱 두 개만 받은 후 함수를 돌려주고, 그 함수의 인자로 0이 들어가는 것으로 생각하고 구현하면 위 6번 질문과 같은 문제에 계속 부딪히게 되어 여쭤봅니다. 그리고, 예시에서의 0은 f 가 입력을 받는 타입에 따라 달라질 수 있나요 항상 0이 초기에 입력되나요?
9. 3번 문제의 결과가 [[”팔”;”백”;”팔”];[”이”;”천”]]과 같은 식으로 나오고 숙제 파일의 [[”팔”, “백”, “팔”], [”이”, “천”]] 처럼 쉽표가 안 나오더라도 이는 문제가 없을까요?
10.
위 2번 문제 관련 질문의 연장선으로, 함수 자체가 하나의 임의 타입으로 생각될 수 없다면 f에 관하여 새로운 type을 문제에서 정의해야 할까요? 혹은 f: ('a -> 'a) -> 'a -> 'a가 아니라 f: ('a -> 'a) -> ('a -> 'a)와 같이 타입이 정의되는 것은 불가능한지 알고 싶습니다.
11. 마지막으로 7번 문제에서 6번에서 정의했던 crazy3val을 같은 파일에 추가해야 하는지 알고 싶습니다.
긴 질문글 읽어주셔서 정말 감사드립니다. |
|
| 위로 |
|
 |
안중원 Site Admin
가입: 2023년 3월 13일 올린 글: 31
|
올려짐: 2026년3월13일 16:15 주제: |
|
|
안녕하세요, 조교 안중원입니다.
1. 기존에 정의된 이름 또는 문제에서 주어진 이름과 겹치지만 않는다면 보조 함수는 자유롭게 정의하셔도 좋습니다.
2. 향후 과제에서 스켈레톤 코드에서 이미 사용되고 있는 라이브러리가 있는 경우 해당 라이브러리는 사용하셔도 좋습니다. 그외에 사용하고자 하는 라이브러리가 있는 경우 웹보드에 문의해주세요.
3. ANDALSO와 ORELSE에 대해서는 생각하신 바가 맞습니다. IMPLY에 대해서는, f1이 거짓이라면 f2의 의미를 생각할 필요 없이 참이고, f1이 참이라면 f2가 참일 때만 참이라고 이해하시면 됩니다. 수업시간에 비슷한 논리식 문법을 다룬바 있으니 참고하시기 바랍니다.
4, 5. 생각하신 바가 맞습니다. 문제 PDF 및 웹보드 공지를 읽어보면 알 수 있는 내용들이니 주의깊게 살펴보시기 바랍니다.
6. 보다 구체적인 예시를 들어주시면 자세한 답변이 가능할 것 같습니다. 일반적으로 utop에서 확인했을 때 f로 int -> int 타입인 값을 넣어도, string -> string 타입인 값을 넣어도 정상적으로 작동하도록 짜시면 됩니다.
7. identity 함수는 일반적으로 수학에서 쓰는 항등 함수 ( https://ko.wikipedia.org/wiki/%ED%95%AD%EB%93%B1_%ED%95%A8%EC%88%98 ) 를 의미합니다. OCaml 공식 라이브러리를 쓰지 않아도 해당 문제를 푸실 수 있습니다.
8. "iter(n, f) x" 꼴의 식에서 x는 0으로 고정되는 것이 아니라, f에 따라 적절한 타입의 값으로 주어진다고 생각하시면 됩니다.
9. 말씀하신 것처럼 OCaml에서 리스트의 각 원소는 세미콜론( ; )으로 구분됩니다. 출력에서 세미콜론으로 구분된 리스트가 나오는 것은 전혀 문제가 없습니다.
10. OCaml 자체의 다형(polymorphic) 타입시스템에서 함수 타입은 여타 타입과 같은 방식으로 다뤄집니다. 해당 문제는 새로운 type 정의 없이도 풀리는 문제입니다. 또한, OCaml에서 ('a -> 'a) -> 'a -> 'a 타입과 ('a -> 'a) -> ('a -> 'a) 타입은 같은 타입입니다. (타입에서 `->`는 오른쪽부터 묶이는(right-associative) 연산자입니다.) 아울러 야금야금/꿀꺽(curried/uncurried) 함수의 구분에 주의하시길 당부드립니다.
11. 7번 문제에서 crazy3val을 반드시 포함해야할 필요는 없습니다. 해당 함수의 포함 여부 자체는 채점 결과에 직접적인 영향이 없습니다만, 웹보드 및 숙제 문서에 설명된 제약 사항에 유의하시기 바랍니다.
감사합니다. _________________ TA 안중원
e-mail: jwahn@ropas.snu.ac.kr |
|
| 위로 |
|
 |
최정원
가입: 2025년 3월 22일 올린 글: 12
|
올려짐: 2026년3월13일 17:09 주제: |
|
|
빠른 답변 정말 감사드립니다!
2번의 경우 현재 String, Bool, Fun 등의 ocaml 모듈과 <>와 같은 기호를 사용했는데 괜찮을까요?
6번의 경우, 만약 코드 자체에서 재귀적으로 f (iter (n - 1, f)) 와 같이 f가 어떤 함수를 받게 하면, ocaml에서 f 는 ('a -> 'a) -> 'a -> 'a 의 형식인 것으로 판단하는 것 같습니다. 이 경우 f가 'a -> 'a 와 같은 꼴이 아니므로 f 자리에 int나 string 등을 넣는 것이 불가합니다. 그러나 f 가 재귀적으로 다른 함수를 받게 하지 않는 경우 f를 겹쳐서 여러번 적용할 수 있는 방법이 있는지 잘 모르겠습니다..ㅠ
또한, 8번의 경우 iter 함수를 정의할 때 처음부터 let rec iter (n, f) x = ... 로 정의해도 가능하다는 말씀이신가요?
추가로 계속 여쭤봐서 죄송합니다. |
|
| 위로 |
|
 |
신채환 Site Admin
가입: 2024년 3월 6일 올린 글: 21
|
올려짐: 2026년3월13일 18:28 주제: |
|
|
안녕하세요? 조교 신채환입니다.
1. 해당 모듈과 연산자는 사용하셔도 됩니다.
2. 힌트를 드릴 수는 없지만, 식의 각 부분이 어떤 타입을 가지고 있는지를 중심으로 생각해 보시기를 추천드립니다.
3. 각 문제의 타입과 요구 사항을 만족하게만 구현하시면 상관 없습니다.
감사합니다. |
|
| 위로 |
|
 |
최정원
가입: 2025년 3월 22일 올린 글: 12
|
올려짐: 2026년3월14일 17:37 주제: |
|
|
| 답변 감사드립니다! |
|
| 위로 |
|
 |
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|