게시판 인덱스

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

[HW6] 3번 정수곱셈 람다식 질문

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Spring 2022)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
강호찬



가입: 2019년 9월 12일
올린 글: 24

올리기올려짐: 2022년5월6일 22:18    주제: [HW6] 3번 정수곱셈 람다식 질문 인용과 함께 답변

안녕하세요 조교님,
컴퓨터공학부 17학번 강호찬입니다.

다음과 같은 식으로 정수곱셈을 해보려고 했는데요,
잘 되지 않아서 질문을 드립니다.

let a = \m.\n.\s.\z.m s (n s z) in
let z = \f.\x.x in
let m = \m.\n.m (a n) z in
let t = \f.\x.fffx in
let t' = \f.\x.ffx in
m t t'

강의자료 5-0.pdf 56쪽 등을 참고해서 작성을 해보았는데요,

a 는 덧셈을 하는 연산자,
m 은 곱셈을 하는 연산자,
z, t, t' 은 각각 0, 3, 2 숫자에 해당하는 람다식입니다.

제가 보기엔 저 식대로는 문제가 없어 보여서 2 * 3의 값인 6에 대항하는 람다식이 나오기를 기대했는데, 입력 람다식을 파싱한 걸 보여주는 (input program) 출력값인

((\m.\n.((m) ((\m.\n.\s.\z.((m) (s)) (((n) (s)) (z))) (n))) (\f.\x.x)) (\f.\x.(((f) (f)) (f)) (x))) (\f.\x.((f) (f)) (x))

https://lambdacalc.io/ 에서 돌리면 계산이 끝도 없이 이어지는 것 같습니다.
혹시 정수 곱셈을 하는데 제가 어떤 식을 잘못 썼는지 도움을 주실 수 있을까요?

감사합니다,
강호찬 드림.
위로
사용자 정보 보기 비밀 메시지 보내기
이재호
Site Admin


가입: 2022년 3월 6일
올린 글: 83

올리기올려짐: 2022년5월7일 15:01    주제: 인용과 함께 답변

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

작성하신 코드를 살펴보니, 수를 인코딩할 때 associtivity 때문에 생긴 문제로 생각됩니다.
Left-associativity에 따라서 fffx와 같은 형태로 작성하시면 ((ff)f)x로 처리됩니다.
따라서 f(f(fx))와 같이 직접 괄호를 넣어주시면 됩니다.
언급하신 https://lambdacalc.io 에서도 이와 같이 적용하여 넣어주면 실행이 됩니다.

감사합니다.
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
강호찬



가입: 2019년 9월 12일
올린 글: 24

올리기올려짐: 2022년5월7일 19:13    주제: 인용과 함께 답변

안녕하세요,
f(f(f(x))) 와 같이 괄호를 써서 right associativity 를 강제하면 정상적으로 계산이 되는 것을 확인했습니다.

그런데, 덧셈 연산 같은 경우는 그러한 괄호가 없어도 연산이 수행되기도 하고,
강좌 슬라이드에도 괄호를 표시하지는 않았는데요,

그럼 슬라이드에서 수를 나타낸 람다식들은 그러한 괄호가 생략된 것으로 보면 되나요??
좀 더 본질적으로, 원래 람다식에서 수를 표현할 때 right assiciativity가 되도록 괄호를 써야 하는 건가요??



감사합니다.
위로
사용자 정보 보기 비밀 메시지 보내기
이재호
Site Admin


가입: 2022년 3월 6일
올린 글: 83

올리기올려짐: 2022년5월7일 19:40    주제: 인용과 함께 답변

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

참고하신 강좌 슬라이드 5-0.pdf의 62쪽에 1+2를 계산하는 예시가 순차적으로 나옵니다.
여기서 보시면 2는 \f.\x.f(fx)와 같이 괄호 표기가 된 것을 보실 수 있습니다.

Application은 left-associative하기 때문에, 처치 인코딩으로 수를 표현할 때는 \f.\x.f(f(...(f x)...))와 같이 괄호를 쳐야 올바른 순서로 application이 진행된다고 보시면 됩니다.

감사합니다.
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
강호찬



가입: 2019년 9월 12일
올린 글: 24

올리기올려짐: 2022년5월8일 16:53    주제: 인용과 함께 답변

감사합니다!

강호찬 드림.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Spring 2022) 시간대: GMT + 9 시간(한국)
페이지 11

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


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