게시판 인덱스

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

5-3 테스트셋

 
글 쓰기   답변 달기     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2012)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
민현기



가입: 2012년 9월 15일
올린 글: 29

올리기올려짐: 2012년10월23일 15:08    주제: 5-3 테스트셋 인용과 함께 답변

작년 테스트셋을 올해에 맞게 수정했습니다.


(define rt empty-ruletable)
(define a1 (make-rule "s0" 'one (cons 'write 'one) 'left "s0"))
(define a2 (make-rule "s0" 'plus (cons 'write 'one) 'left "s1"))
(define a3 (make-rule "s1" 'one (cons 'write 'one) 'left "s1"))
(define a4 (make-rule "s1" 'BLANK 'erase 'right "s2"))
(define a5 (make-rule "s2" 'one 'erase 'right "s3"))
(define a6 (make-rule "s3" 'one (cons 'write 'one) 'right "s3"))
(define a7 (make-rule "s3" 'BLANK 'erase 'left "s4"))

(define rt (add-rule a1 (add-rule a2 (add-rule a3 (add-rule a4 (add-rule a5 (add-rule a6 (add-rule a7 empty-ruletable))))))))

(print-tm (run-tm (make-tm (list 'one 'one 'one 'plus 'one 'one) "s0" rt)))

;; answer: one one one one one



(set! rt empty-ruletable)
(set! rt (add-rule (make-rule "s0" 'a (cons 'write 'a_1) 'left "s1") rt))
(set! rt (add-rule (make-rule "s0" 'b (cons 'write 'b_1) 'left "s2") rt))
(set! rt (add-rule (make-rule "s1" 'a (cons 'write 'a) 'left "s1") rt))
(set! rt (add-rule (make-rule "s1" 'b (cons 'write 'b) 'left "s1") rt))
(set! rt (add-rule (make-rule "s1" 'a_2 (cons 'write 'a_2) 'left "s1") rt))
(set! rt (add-rule (make-rule "s1" 'b_2 (cons 'write 'b_2) 'left "s1") rt))
(set! rt (add-rule (make-rule "s1" 'BLANK (cons 'write 'a_2) 'right "s3") rt))
(set! rt (add-rule (make-rule "s2" 'a (cons 'write 'a) 'left "s2") rt))
(set! rt (add-rule (make-rule "s2" 'b (cons 'write 'b) 'left "s2") rt))
(set! rt (add-rule (make-rule "s2" 'a_2 (cons 'write 'a_2) 'left "s2") rt))
(set! rt (add-rule (make-rule "s2" 'b_2 (cons 'write 'b_2) 'left "s2") rt))
(set! rt (add-rule (make-rule "s2" 'BLANK (cons 'write 'b_2) 'right "s3") rt))
(set! rt (add-rule (make-rule "s3" 'a_2 (cons 'write 'a_2) 'right "s3") rt))
(set! rt (add-rule (make-rule "s3" 'b_2 (cons 'write 'b_2) 'right "s3") rt))
(set! rt (add-rule (make-rule "s3" 'a (cons 'write 'a ) 'right "s_noend") rt))
(set! rt (add-rule (make-rule "s3" 'b (cons 'write 'b ) 'right "s_noend") rt))
(set! rt (add-rule (make-rule "s3" 'a_1 (cons 'write 'a_1) 'left "s_semifinal") rt))
(set! rt (add-rule (make-rule "s3" 'b_1 (cons 'write 'b_1) 'left "s_semifinal") rt))
(set! rt (add-rule (make-rule "s_noend" 'a (cons 'write 'a ) 'right "s_noend") rt))
(set! rt (add-rule (make-rule "s_noend" 'b (cons 'write 'b ) 'right "s_noend") rt))
(set! rt (add-rule (make-rule "s_noend" 'a_1 (cons 'write 'a_1) 'left "s0") rt))
(set! rt (add-rule (make-rule "s_noend" 'b_1 (cons 'write 'b_1) 'left "s0") rt))
(set! rt (add-rule (make-rule "s_semifinal" 'a_2 (cons 'write 'a_2) 'left "s_semifinal") rt))
(set! rt (add-rule (make-rule "s_semifinal" 'b_2 (cons 'write 'b_2) 'left "s_semifinal") rt))
(set! rt (add-rule (make-rule "s_semifinal" 'BLANK 'erase 'right "s_ff") rt))
(set! rt (add-rule (make-rule "s_ff" 'a_2 (cons 'write 'a ) 'right "s_ff") rt))
(set! rt (add-rule (make-rule "s_ff" 'a_1 (cons 'write 'a ) 'right "s_ff") rt))
(set! rt (add-rule (make-rule "s_ff" 'b_2 (cons 'write 'b ) 'right "s_ff") rt))
(set! rt (add-rule (make-rule "s_ff" 'b_1 (cons 'write 'b ) 'right "s_ff") rt))
(set! rt (add-rule (make-rule "s_ff" 'BLANK 'erase 'left "s_final") rt))

(newline)
(print-tm (run-tm (make-tm (list 'b 'a 'a 'a 'a 'a 'b 'a 'b) "s0" rt)))

;; answer: b a a a a a b a b b a a a a a b a b



(define (convert_rulelist_to_ruletable lst )
(cond ((null? lst) empty-ruletable)
(else
(let* ((rule (first lst))
(cstate (list-ref rule 0))
(csymbol (list-ref rule 1))
(todo (list-ref rule 2))
(move (list-ref rule 3))
(nstate (list-ref rule 4)))
(add-rule (make-rule cstate csymbol todo move nstate)
(convert_rulelist_to_ruletable (rest lst)))))))
(newline)
(print-tm (run-tm (make-tm (list 'one 'one 'one 'one 'one) "s1"
(convert_rulelist_to_ruletable
(list (list "s1" 'BLANK 'erase 'stay 'H)
(list "s1" 'one 'erase 'left "s2")
(list "s2" 'BLANK 'erase 'left "s3")
(list "s2" 'one (cons 'write 'one) 'left "s2")
(list "s3" 'BLANK (cons 'write 'one) 'right "s4")
(list "s3" 'one (cons 'write 'one) 'left "s3")
(list "s4" 'BLANK 'erase 'right "s5")
(list "s4" 'one (cons 'write 'one) 'right "s4")
(list "s5" 'BLANK (cons 'write 'one) 'left "s1")
(list "s5" 'one (cons 'write 'one) 'right "s5"))))))

;; answer: one one one one one BLANK one one one one one
위로
사용자 정보 보기 비밀 메시지 보내기
조동철



가입: 2011년 9월 6일
올린 글: 35

올리기올려짐: 2012년10월24일 20:02    주제: 인용과 함께 답변

마지막 테스트 셋의 첫 번째 룰에 오타가 있는 것 같습니다.

코드:
(list "s1" 'BLANK 'erase 'stay 'H)


여기서 next state가 'H로 되 있는데,

문제 스펙에서 state는 scheme string타입이기때문에 이를 "H"로 바꿔줘야 할 것 같습니다.

그거 외에는 잘 작동하네요.

감사합니다^^[/code]
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2012) 시간대: GMT + 9 시간(한국)
페이지 11

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


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