게시판 인덱스

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

if문에 대한 질문입니다.

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



가입: 2008년 9월 4일
올린 글: 18

올리기올려짐: 2008년9월12일 22:42    주제: if문에 대한 질문입니다. 인용과 함께 답변

처음에 하노이타워를 if문을 이용해서 짯었습니다.
코드:
(define (move-tower n from to rest)
  (if (= n 1) (print-move from to)
      ((move-tower (- n 1) from rest to)
       (print-move from to)
       (move-tower (- n 1) rest to from))
       ))

그런데 실행시에 에러가 나길래,
솔루션을 보니 cond 문을 사용했더라구요.


그래서 몇 가지 실험해보았는데,
코드:
(define (test x)
  (if (= x 1) ((display 1) (display 2))
      ((display 3) (display 4))
      ))

위와 같이 짜면
(test 1)
(test 2) 에 대해 모두 에러가 나고,

코드:
(define (test2 x)
  (cond ((= x 1) (display 1) (display 2))
      (else (display 3) (display 4))
      ))

cond를 이용했을 경우에는 올바르게 작동하더라구요.

혹시 실습시간에 말하셨는데 제가 못들었을 수도 있지만,
if문에서는 분기한 후에 2가지 명령을 수행하지 못하는건가요? 아니면, 2가지 이상의 명령 실행을 위해서 문법적으로 추가해줘야 할 것이 있나요? Rolling Eyes
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 MSN 메신저
최원태



가입: 2006년 9월 16일
올린 글: 369

올리기올려짐: 2008년9월13일 16:37    주제: 순차적으로 여러 식을 실행시키는 방법 인용과 함께 답변

여러개의 expression을 순차적으로 실행시키는 문법구조로 begin 이란 녀석이 있습니다.

코드:
(begin 1 2 3 4)

((lambda () 1 2 3 4))

begin을 사용한 식 부터 봅시다.
이렇게 사용하면 제일 앞에 식 부터 하나씩 실행시키다가 가장 마지막 식의 값을 돌려주지요.
위의 경우에는 4을 돌려줄겁니다.
lambda를 사용한 코드도 begin을 쓴 코드와 똑같은 기능을 합니다.
(사실은, begin을 이용한 코드는 아래 코드의 sugar입니다)

그럼 본론으로 넘어가 볼 까요?
코드:
(cond ((case1) code1)) (else code2))

(if (case1) (begin code1) (begin code2))

(if (case1) code1 code2)


첫 식은 세 번재 식이 아니라 두 번째 식과 같습니다.
begin을 쓸 일이 없을거라 생각했기 때문에 간단하게 세 번째 것과 같다고 설명했는데 사실은 그렇지 않습니다.

code1의 생김이 exp1 exp2 꼴이라면,
두 번째 식에서는 (begin exp1 exp2)가 되어 순차적으로 실행이 되겠지만
세 번째 식에서는 (exp1 exp2)가 되어 exp1을 함수로 보고 exp2를 인자로 함수호출을 하게 됩니다.
의미가 완전히 달라지는거죠.
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2008) 시간대: GMT + 9 시간(한국)
페이지 11

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


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