| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
kernys
가입: 2011년 10월 26일 올린 글: 10
|
올려짐: 2011년10월30일 0:48 주제: 조교님이 올려주신 5-2 튜링머신 테스트셋 |
|
|
(define rt (empty-ruletable))
(set! rt (add-rule (make-rule 's0 'one (cons 'write 'one) 'left 's0) rt))
(set! rt (add-rule (make-rule 's0 'plus (cons 'write 'one) 'left 's1) rt))
(set! rt (add-rule (make-rule 's1 'one (cons 'write 'one) 'left 's1) rt))
(set! rt (add-rule (make-rule 's1 'BLANK (cons 'write 'BLANK) 'right 's2) rt))
(set! rt (add-rule (make-rule 's2 'one (cons 'write 'BLANK) 'right 's3) rt))
(set! rt (add-rule (make-rule 's3 'one (cons 'write 'one) 'right 's3) rt))
(set! rt (add-rule (make-rule 's3 'BLANK (cons 'write 'BLANK) 'left 's4) rt))
(define tm (make-tm (list 'one 'one 'one 'plus 'one 'one) (list 's4) 's0 rt))
(run-tm tm)
(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 (cons 'write 'BLANK) '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 (cons 'write 'BLANK) 'left 's_final) rt))
(define tm (make-tm (list 'b 'a 'a 'a 'a 'a 'b 'a 'b) (list 's_final) 's0 rt))
(run-tm tm)
-- RESULT
one one one one one
b a a a a a b a b b a a a a a b a b
마지막 꺼는 인풋을 약간 바꾸었습니다.. 저게 잘되면 다른 것도 잘 될거예요..
값 중심, 물건 중심 둘다 동일한 결과..
p.s) 김원배 입니다...
회원가입시 설정한 이름 어떻게 바꾸나요..
kernys 가 2011년11월1일 0:47에 수정함, 총 1 번 수정됨 |
|
| 위로 |
|
 |
김상우
가입: 2011년 9월 10일 올린 글: 50
|
올려짐: 2011년10월30일 1:23 주제: BLANK는 erase로 해야될 것 같은데요? |
|
|
숙제에
"todo는 ’erase 거나 ’write와 symbol의 cons-쌍"
이라고 나와있는데
'write 'BLANK가 아닌 'erase가 되어야 하지 않을까요?
전 이렇게 돌렸습니다
(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)))))))))
(define tm1 (make-tm (list 'one 'one 'one 'plus 'one 'one) (list 's4) 's0 rt))
(run-tm tm1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define rt2 (list
(make-rule 's0 'a (cons 'write 'a_1) 'left 's1)
(make-rule 's0 'b (cons 'write 'b_1) 'left 's2)
(make-rule 's1 'a (cons 'write 'a) 'left 's1)
(make-rule 's1 'b (cons 'write 'b) 'left 's1)
(make-rule 's1 'a_2 (cons 'write 'a_2) 'left 's1)
(make-rule 's1 'b_2 (cons 'write 'b_2) 'left 's1)
(make-rule 's1 'BLANK (cons 'write 'a_2) 'right 's3)
(make-rule 's2 'a (cons 'write 'a) 'left 's2)
(make-rule 's2 'b (cons 'write 'b) 'left 's2)
(make-rule 's2 'a_2 (cons 'write 'a_2) 'left 's2)
(make-rule 's2 'b_2 (cons 'write 'b_2) 'left 's2)
(make-rule 's2 'BLANK (cons 'write 'b_2) 'right 's3)
(make-rule 's3 'a_2 (cons 'write 'a_2) 'right 's3)
(make-rule 's3 'b_2 (cons 'write 'b_2) 'right 's3)
(make-rule 's3 'a (cons 'write 'a) 'right 's_noend)
(make-rule 's3 'b (cons 'write 'b) 'right 's_noend)
(make-rule 's3 'a_1 (cons 'write 'a_1) 'left 's_semifinal)
(make-rule 's3 'b_1 (cons 'write 'b_1) 'left 's_semifinal)
(make-rule 's_noend 'a (cons 'write 'a) 'right 's_noend)
(make-rule 's_noend 'b (cons 'write 'b) 'right 's_noend)
(make-rule 's_noend 'a_1 (cons 'write 'a_1) 'left 's0)
(make-rule 's_noend 'b_1 (cons 'write 'b_1) 'left 's0)
(make-rule 's_semifinal 'a_2 (cons 'write 'a_2) 'left 's_semifinal)
(make-rule 's_semifinal 'b_2 (cons 'write 'b_2) 'left 's_semifinal)
(make-rule 's_semifinal 'BLANK 'erase 'right 's_ff)
(make-rule 's_ff 'a_2 (cons 'write 'a) 'right 's_ff)
(make-rule 's_ff 'a_1 (cons 'write 'a) 'right 's_ff)
(make-rule 's_ff 'b_2 (cons 'write 'b) 'right 's_ff)
(make-rule 's_ff 'b_1 (cons 'write 'b) 'right 's_ff)
(make-rule 's_ff 'BLANK 'erase 'left 's_final)
))
;이 ruletable 부분은 원래 add-rule로 일일이 다 더해줘야합니다.
;그 작업이 너무 힘든 관계로 리스트형태로 받게해서 테스트했습니다
;실제로 학우님들이 테스트하실땐 add-rule로 해주세요!!
;조언해주신 이상호학우님 감사합니다!^^
(define tm1 (make-tm (list 'a 'b 'a) (list 's_final) 's0 rt2))
(run-tm tm1)
김상우 가 2011년10월30일 2:32에 수정함, 총 1 번 수정됨 |
|
| 위로 |
|
 |
kernys
가입: 2011년 10월 26일 올린 글: 10
|
올려짐: 2011년10월30일 2:07 주제: |
|
|
| 정정 감사합니다, 김상우 학우님. |
|
| 위로 |
|
 |
권민혁
가입: 2011년 10월 30일 올린 글: 8
|
올려짐: 2011년10월30일 9:17 주제: 감사합니다. |
|
|
누군가 이렇게 해주실줄 알았습니다.^^
감사합니다.
김원배, 김상우 학우님들. (아 그리고 상호도) |
|
| 위로 |
|
 |
현.철
가입: 2011년 9월 27일 올린 글: 35
|
올려짐: 2011년10월30일 10:50 주제: |
|
|
empty-ruletable은 함수가 아니어야 할 것 같습니다.
(empty-ruletable) 가 아니라 empty-ruletable로 쓰여야 하지 않을까요? |
|
| 위로 |
|
 |
김상우
가입: 2011년 9월 10일 올린 글: 50
|
올려짐: 2011년10월30일 14:13 주제: 숙제pdf에 함수라고 써져있어서 일단 함수로 만들었습니다. |
|
|
작동규칙표를 만들고 사용하는 함수들:
empty-ruletable : ruletable
이렇게 되있네요 |
|
| 위로 |
|
 |
이영석
가입: 2011년 9월 5일 올린 글: 103
|
올려짐: 2011년10월30일 14:52 주제: |
|
|
제대로 돌아가니 다행이군요.
사실 손으로 짠거라 제대로 안돌아갈지 걱정이었는데 ㅎ |
|
| 위로 |
|
 |
현.철
가입: 2011년 9월 27일 올린 글: 35
|
올려짐: 2011년10월30일 15:28 주제: |
|
|
함수라면
void -> ruletable아닌가요? |
|
| 위로 |
|
 |
방정호
가입: 2011년 9월 19일 올린 글: 40
|
올려짐: 2011년10월31일 0:22 주제: 첫번째 테스트 셋 |
|
|
첫번째 테스트 셋 결과가
[ one one one one one ]
이어야 되는 것 같아요.
앞 뒤에 넣어놓는 BLANK 를 제외한다면,
결과 데이터는 one one one one one BLANK 가 되어야 할 것 같습니다.
원래 테이프에서
one one one 까지 s0 상태였다가
plus 를 만나면 s1 상태가 되고,
여기까지 테이프에는 계속 one 을 쓰고요.
s1 상태에서 blank를 만나면(오늘쪽 맨 끝까지 가면) 방향을 반대로 가고
그 상태에서 one을 만나면 (방향 바꾸자마자 처음) BLANK 로 바꿉니다.
그 다음부터는 반대쪽 끝까지 쭉 가서 끝나네요.
그러면
one one one one one BLANK
여야 될 것 같은데,
맞는걸까요? |
|
| 위로 |
|
 |
이태영
가입: 2011년 9월 19일 올린 글: 34
|
올려짐: 2011년10월31일 1:07 주제: |
|
|
| 방정호님 말씀이 맞는 것 같아요. 처음에 쭉 훑고 가면서 plus를 one으로 바꿔서 one이 여섯개였다가. 맨 끝 BLANK를 만나면 맨 오른쪽 one을 지우니까 그 자리가 BLANK가 되겠네요 |
|
| 위로 |
|
 |
이상선
가입: 2011년 9월 27일 올린 글: 26
|
올려짐: 2011년10월31일 21:32 주제: |
|
|
empty-ruletable의 경우에
제 생각에도 현.철님 말씀처럼 함수가 아니라 그냥 정의가 되어야할 것 같습니다.
이전 숙제에서
black : 무늬
white : 무늬
위 두개를 함수로 하지않고 단순히 정의만 했으니까요 |
|
| 위로 |
|
 |
kkhseed
가입: 2011년 9월 27일 올린 글: 21
|
올려짐: 2011년10월31일 22:04 주제: |
|
|
| 이태영 씀: | | 방정호님 말씀이 맞는 것 같아요. 처음에 쭉 훑고 가면서 plus를 one으로 바꿔서 one이 여섯개였다가. 맨 끝 BLANK를 만나면 맨 오른쪽 one을 지우니까 그 자리가 BLANK가 되겠네요 |
제가 이해한 바로는, 튜링 머신에 집어넣는 tape의 경우에는 왼쪽으로도, 오른쪽으로도 무한하게 BLANK가 존재하는 것으로 알고 있습니다.
따라서
one one one one one BLANK
는
one one one one one
과 같겠죠.
print-tm 을 돌려보셔서 동일한 결과가 나오면 맞는 게 아닐까요?
추가: 첫 번째 테스트셋 결과가 틀린 것을 못 봤네요. 어쨌든 형식에 상관없이 one이 다섯 개 나오는 것이 맞는 것 같습니다. _________________ //강기환 |
|
| 위로 |
|
 |
kernys
가입: 2011년 10월 26일 올린 글: 10
|
올려짐: 2011년11월1일 0:47 주제: |
|
|
아 그렇네요... write 'BLANK 명령을 왜 무시했었는지...
one one one one one 이네요.. |
|
| 위로 |
|
 |
이승중
가입: 2010년 6월 22일 올린 글: 561
|
올려짐: 2011년11월1일 2:23 주제: |
|
|
함수들 목록에 나와있지만 타입이 함수가 아니네요
하지만 물건중심으로 프로그래밍 하려면 함수로 하는게 좋을 것 같습니다.
empty-ruletable: void -> ruletable 로 고쳐주세요 |
|
| 위로 |
|
 |
유.강민
가입: 2011년 3월 22일 올린 글: 38
|
올려짐: 2011년11월1일 20:32 주제: RE |
|
|
저도 테스트셋 하나 위키에 있는 예제 따라 만들어봤습니다. 테이프에 있는 1들을 좌우 대칭으로 복사하는 함수입니다. 문제있으면 지적 해주세요.
| 코드: |
(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)))))))
(print-tm (run-tm (make-tm (list 'one 'one 'one 'one 'one) (list 'H) '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))))))
;답: one one one one one BLANK one one one one one
|
|
|
| 위로 |
|
 |
|