| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
민현기
가입: 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] |
|
| 위로 |
|
 |
|