게시판 인덱스

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

print의 void 처리 관련 문제

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2009)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
윤용호



가입: 2008년 9월 23일
올린 글: 257

올리기올려짐: 2009년10월9일 10:49    주제: print의 void 처리 관련 문제 인용과 함께 답변

이번 숙제에 print 함수가 세가지가 있습니다.

maze-pp, pprint-array, pprint-tree

이 셋은 모두 'void'를 만들어내는 타입으로 되어있는데요

Drscheme에서만 그런건지 다른 scheme에서도 그런건지 모르겠으나

> (display "hi")
hi
> ((lambda (x) void) 1)
#<primitive:void>

이와 같이 수행 결과가 다릅니다.
display가 void라는 '값'을 만들어낸다면 화면에 출력 외에도
#<primitive:void> 라는 문구가 추가로 나와야 할 것 같은데
그냥 출력만 하는군요.

그렇다면, 저희가 만들 함수 maze-pp, pprint 들의 경우
화면에 원하는 출력을 한 이후에
#<primitive:void> 라는 값까지 만들어내야 하는지
아니면 그냥 display의 수행결과처럼
실행 이후 출력내용 이외의 아무 값도 나타나지 않아도 상관없는지 알고싶습니다.
위로
사용자 정보 보기 비밀 메시지 보내기
장수원



가입: 2008년 9월 26일
올린 글: 167

올리기올려짐: 2009년10월9일 11:36    주제: Re: print의 void 처리 관련 문제 인용과 함께 답변

윤용호 씀:


> (display "hi")
hi
> ((lambda (x) void) 1)
#<primitive:void>

이와 같이 수행 결과가 다릅니다.
display가 void라는 '값'을 만들어낸다면 화면에 출력 외에도
#<primitive:void> 라는 문구가 추가로 나와야 할 것 같은데
그냥 출력만 하는군요.

함수 display는 void값을 리턴합니다. reference를 확인해 보셔도 되고, 다음 코드를 실행해 보면 분명합니다.
코드:

>(let ((v (display "Hello, World!\n"))) (void? v))
Hello, World!
#t

그리고 식 "void"는 void값을 만들어 내는 함수입니다. 따라서 "(void)"라고 해야 void값을 리턴합니다. 다음 코드를 실행시켜보세요.
코드:

>(void? (void))
#t
>(void? void)
#f

#<primitive:void>가 찍히는 것은 함수를 리턴했기 때문입니다. 식 "((lambda (x) void) 1)" 는 최종적으로 void값이 아닌 void함수를 값으로 가집니다(괄호로 한번 더 묶으면 void값을 가지게 되겠죠)
코드:

>(procedure? ((lambda (x) void) 1) )
#t
>(void? (((lambda (x) void) 1)) )
#t


인용:

그렇다면, 저희가 만들 함수 maze-pp, pprint 들의 경우
화면에 원하는 출력을 한 이후에
#<primitive:void> 라는 값까지 만들어내야 하는지
아니면 그냥 display의 수행결과처럼
실행 이후 출력내용 이외의 아무 값도 나타나지 않아도 상관없는지 알고싶습니다.

따라서 maze-pp 등이 #<primitive:void>라는 값을 리턴한다면, 잘못된 함수 정의입니다.
위로
사용자 정보 보기 비밀 메시지 보내기
윤용호



가입: 2008년 9월 23일
올린 글: 257

올리기올려짐: 2009년10월9일 13:39    주제: 아하 인용과 함께 답변

아하 void가 함수라서 그렇군요

감사합니다
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2009) 시간대: GMT + 9 시간(한국)
페이지 11

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


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