게시판 인덱스

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

숙제 6 테스트셋

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



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

올리기올려짐: 2012년11월16일 3:40    주제: 숙제 6 테스트셋 인용과 함께 답변

일부는 지난 게시판에서 퍼왔습니다.

6-1 & 6-2.

let c = "";;

let a1 = (LEAF Korea);;
let a2 = (LEAF France);;
let a3 = (LEAF Usa);;
let a4 = (LEAF Brazil);;
let a5 = (LEAF Japan);;
let a6 = (LEAF Nigeria);;
let a7 = (LEAF Cameroon);;
let a8 = (LEAF Poland);;
let a9 = (LEAF Portugal);;
let a10 = (LEAF Italy);;
let a11 = (LEAF Germany);;
let a12 = (LEAF Norway);;
let a13 = (LEAF Sweden);;
let a14 = (LEAF England);;
let a15 = (LEAF Argentina);;

let a16 = (NODE(NODE(LEAF Korea, LEAF Portugal), LEAF Brazil));;
let a17 = (NODE(LEAF Norway, NODE(NODE(LEAF Cameroon, LEAF Poland), LEAF Sweden))) ;;
let a18 = (NODE(NODE(LEAF Norway, NODE(LEAF Cameroon, LEAF Poland)), LEAF Sweden)) ;;
let a19 = (NODE(NODE(LEAF Norway, NODE(LEAF Cameroon, LEAF Poland)), NODE(LEAF Norway, NODE(LEAF Cameroon, LEAF Poland)))) ;;

let a20 = (NODE(NODE(LEAF Argentina, NODE(LEAF Argentina, LEAF Argentina)), NODE(LEAF Argentina, NODE(LEAF Argentina, LEAF Argentina)))) ;;
let a21 = (NODE(NODE(LEAF Germany, NODE(LEAF Germany, LEAF Germany)), LEAF Germany)) ;;
let a22 = (NODE(LEAF England, NODE(LEAF England, NODE(LEAF England, LEAF England)))) ;;
let a23 = (NODE(NODE(LEAF Norway, NODE(LEAF Cameroon, LEAF Poland)), NODE(LEAF Norway, NODE(LEAF Italy, LEAF Italy)))) ;;

drop(a1,Korea) = c;;
drop(a2,France) = c;;
drop(a3,Usa) = c;;
drop(a4,Brazil) = c;;
drop(a5,Japan) = c;;
drop(a6,Nigeria) = c;;
drop(a7,Cameroon) = c;;
drop(a8,Poland) = c;;
drop(a9,Portugal) = c;;
drop(a10,Italy) = c;;
drop(a11,Germany) = c;;
drop(a12,Norway) = c;;
drop(a13,Sweden) = c;;
drop(a14,England) = c;;
drop(a15,Argentina) = c;;
drop(a2,Cameroon) = "France";;

drop(a16,Japan) = "((Korea Portugal) Brazil)";;
drop(a16,Korea) = "(Portugal Brazil)" ;;
drop(a16,Brazil) = "(Korea Portugal)";;
drop(a16,Portugal) = "(Korea Brazil)";;

drop(a17,Japan) = "(Norway ((Cameroon Poland) Sweden))";;
drop(a17,Norway) = "((Cameroon Poland) Sweden)";;
drop(a17,Cameroon) = "(Norway (Poland Sweden))";;
drop(a17,Poland) = "(Norway (Cameroon Sweden))";;
drop(a17,Sweden) = "(Norway (Cameroon Poland))";;

drop(a18,Japan) = "((Norway (Cameroon Poland)) Sweden)";;
drop(a18,Norway) = "((Cameroon Poland) Sweden)";;
drop(a18,Cameroon) = "((Norway Poland) Sweden)";;
drop(a18,Poland) = "((Norway Cameroon) Sweden)";;
drop(a18,Sweden) = "(Norway (Cameroon Poland))";;

drop(a19,Brazil) = "((Norway (Cameroon Poland)) (Norway (Cameroon Poland)))" ;;
drop(a19,Norway) = "((Cameroon Poland) (Cameroon Poland))" ;;
drop(a19,Cameroon) = "((Norway Poland) (Norway Poland))" ;;
drop(a19,Poland) = "((Norway Cameroon) (Norway Cameroon))" ;;

drop(a20,Argentina) = c;;
drop(a21,Germany)=c;;
drop(a22,England)=c;;

drop(a23,Germany) = "((Norway (Cameroon Poland)) (Norway (Italy Italy)))" ;;
drop(a23,Italy) = "((Norway (Cameroon Poland)) Norway)" ;;

drop((NODE(NODE(LEAF France, LEAF France), LEAF Sweden)), France)="Sweden";;
drop((NODE(NODE(NODE(LEAF Sweden, LEAF France), (NODE(LEAF France, LEAF France))), (NODE (LEAF France, LEAF France)))), Sweden)="((France (France France)) (France France))";;

전부 붙여넣기 하신 후 모두 true가 나오면 됩니다.


6-3.

let f p q = eval (ANDALSO (p, (ORELSE (q, (ANDALSO ((NOT p), (NOT q)))))));;
let r_f p q = not (f p q);;
(f TRUE TRUE) = true;;
(f TRUE FALSE) = false;;
(f FALSE TRUE) = false;;
(f FALSE FALSE) = false;;
(r_f TRUE TRUE) = false;;
(r_f TRUE FALSE) = true;;
(r_f FALSE TRUE) = true;;
(r_f FALSE FALSE) = true;;

let g1 p q r = eval (IMPLY ((ANDALSO ((IMPLY (p,(ORELSE (q,r)))),(NOT (ORELSE (q,r))))),(NOT p)));;
(g1 TRUE TRUE TRUE) = true;;
(g1 TRUE TRUE FALSE) = true;;
(g1 TRUE FALSE TRUE) = true;;
(g1 TRUE FALSE FALSE) = true;;
(g1 FALSE TRUE TRUE) = true;;
(g1 FALSE TRUE FALSE) = true;;
(g1 FALSE FALSE TRUE) = true;;
(g1 FALSE FALSE FALSE) = true;;

let g2 p q r = eval (ANDALSO ((IMPLY ((ORELSE (p,q)),(NOT r))),(ORELSE ((NOT r),(ORELSE (q,p))))));;
(g2 TRUE TRUE TRUE) = false;;
(g2 TRUE TRUE FALSE) = true;;
(g2 TRUE FALSE TRUE) = false;;
(g2 TRUE FALSE FALSE) = true;;
(g2 FALSE TRUE TRUE) = false;;
(g2 FALSE TRUE FALSE) = true;;
(g2 FALSE FALSE TRUE) = false;;
(g2 FALSE FALSE FALSE) = true;;

let h1 p q r = eval (ORELSE ((NOT p),(ANDALSO (q,r))));;
(h1 TRUE TRUE TRUE) = true;;
(h1 TRUE TRUE FALSE) = false;;
(h1 TRUE FALSE TRUE) = false;;
(h1 TRUE FALSE FALSE) = false;;
(h1 FALSE TRUE TRUE) = true;;
(h1 FALSE TRUE FALSE) = true;;
(h1 FALSE FALSE TRUE) = true;;
(h1 FALSE FALSE FALSE) = true;;

eval(LESS(PLUS(NUM 5, NUM 5), MINUS(NUM 10, NUM 7)))=false;;
eval(LESS(PLUS(NUM 5, NUM 5), MINUS(NUM 20, NUM 7)))=true;;
true = eval TRUE;;
false = eval FALSE ;;
false = eval (NOT TRUE);;
false = eval (ANDALSO (TRUE, FALSE)) ;;
true = eval (ORELSE (TRUE, FALSE)) ;;
false = eval (LESS (PLUS(NUM 3, NUM 4), MINUS(NUM 7, NUM 8 ))) ;;


6-4.

let a71 = natadd (SUCC ZERO, ZERO) ;;
let a72 = natadd (ZERO, ZERO) ;;
let a73 = natadd (SUCC ZERO, SUCC (SUCC ZERO)) ;;
let a74 = natmul (SUCC ZERO, ZERO) ;;
let a75 = natmul (ZERO, SUCC (SUCC (SUCC ZERO))) ;;
let a76 = natmul (SUCC (SUCC (SUCC (SUCC ZERO))), SUCC (SUCC (SUCC ZERO))) ;;

let r1 = SUCC ZERO;;
let r2 = ZERO;;
let r3 = SUCC (SUCC (SUCC ZERO));;
let r4 = ZERO;;
let r5 = ZERO;;
let r6 = SUCC (SUCC (SUCC (SUCC (SUCC (SUCC (SUCC (SUCC (SUCC (SUCC (SUCC (SUCC ZERO))))))))))) ;;

a71= r1;;
a72 =r2;;
a73= r3;;
a74 =r4;;
a75= r5;;
a76= r6;;


6-5. 어떻게 식을 줄이느냐에 따라 결과가 다르기 때문에 눈으로 확인하셔야 합니다.

let ae1=SUM[TIMES[VAR"a";POWER("x",2)];TIMES[VAR"b";VAR"x"];VAR"c"];;
val ae1 : ae =
SUM [TIMES [VAR "a"; POWER ("x", 2)]; TIMES [VAR "b"; VAR "x"]; VAR "c"]

diff (ae1, "x") ;;
- : ae = SUM [TIMES [VAR "a"; CONST 2; POWER ("x", 1)]; VAR "b"]

diff (ae1, "a") ;;
- : ae = POWER ("x", 2)

diff (ae1, "b") ;;
- : ae = VAR "x"

diff (ae1, "c") ;;
- : ae = CONST 1

diff (ae1, "y") ;;
- : ae = CONST 0

let ae2=SUM[TIMES[POWER("x", 3);POWER("y",2)];TIMES[CONST 5;POWER("x",2);POWER("y",4)];TIMES[CONST 2;POWER("x",3);POWER("y",3);POWER("z",3)];TIMES[VAR "x";POWER("y",5);POWER("z",2)]];;
val ae2 : ae =
 SUM
  [TIMES [POWER ("x", 3); POWER ("y", 2)];
  TIMES [CONST 5; POWER ("x", 2); POWER ("y", 4)];
  TIMES [CONST 2; POWER ("x", 3); POWER ("y", 3); POWER ("z", 3)];
  TIMES [VAR "x"; POWER ("y", 5); POWER ("z", 2)]]

diff (ae2, "x") ;;
- : ae =
SUM
 [TIMES [CONST 3; POWER ("x", 2); POWER ("y", 2)];
 TIMES [CONST 5; CONST 2; POWER ("x", 1); POWER ("y", 4)];
 TIMES [CONST 2; CONST 3; POWER ("x", 2); POWER ("y", 3); POWER ("z", 3)];
 TIMES [POWER ("y", 5); POWER ("z", 2)]]

diff (ae2, "y") ;;
- : ae =
SUM
[TIMES [POWER ("x", 3); CONST 2; POWER ("y", 1)];
TIMES [CONST 5; POWER ("x", 2); CONST 4; POWER ("y", 3)];
TIMES [CONST 2; POWER ("x", 3); CONST 3; POWER ("y", 2); POWER ("z", 3)];
TIMES [VAR "x"; CONST 5; POWER ("y", 4); POWER ("z", 2)]]

diff (ae2, "z") ;;
- : ae =
SUM
[TIMES [CONST 2; POWER ("x", 3); POWER ("y", 3); CONST 3; POWER ("z", 2)];
TIMES [VAR "x"; POWER ("y", 5); CONST 2; POWER ("z", 1)]]

diff (ae2, "2") ;;
- : ae = CONST 0

let ae3=SUM[TIMES[VAR "x";VAR "y"];TIMES[VAR "y";VAR "z"];TIMES[VAR "z";VAR "x"]];;
val ae3 : ae =
SUM
[TIMES [VAR "x"; VAR "y"]; TIMES [VAR "y"; VAR "z"];
TIMES [VAR "z"; VAR "x"]]

diff (ae3, "x") ;;
- : ae = SUM [VAR "y"; VAR "z"]

diff (ae3, "y") ;;
- : ae = SUM [VAR "x"; VAR "z"]

diff (ae3, "z") ;;
- : ae = SUM [VAR "y"; VAR "x"]

diff (ae3, "w") ;;
- : ae = CONST 0

let ae4=TIMES[SUM[TIMES[CONST 2;POWER("x",2)];VAR "x";VAR "y"];SUM[TIMES[CONST 5;POWER("x",2);VAR "y"];POWER("y",2)]];;
val ae4 : ae =
TIMES
[SUM [TIMES [CONST 2; POWER ("x", 2)]; VAR "x"; VAR "y"];
SUM [TIMES [CONST 5; POWER ("x", 2); VAR "y"]; POWER ("y", 2)]]

diff (ae4, "x") ;;
- : ae =
SUM
[TIMES
[SUM [TIMES [CONST 2; POWER ("x", 2)]; VAR "x"; VAR "y"]; CONST 5;
CONST 2; POWER ("x", 1); VAR "y"];
TIMES
[SUM [TIMES [CONST 2; CONST 2; POWER ("x", 1)]; CONST 1];
SUM [TIMES [CONST 5; POWER ("x", 2); VAR "y"]; POWER ("y", 2)]]]

diff (ae4, "y") ;;
- : ae =
SUM
[TIMES
[SUM [TIMES [CONST 2; POWER ("x", 2)]; VAR "x"; VAR "y"];
SUM [TIMES [CONST 5; POWER ("x", 2)]; TIMES [CONST 2; POWER ("y", 1)]]];
TIMES [CONST 5; POWER ("x", 2); VAR "y"]; POWER ("y", 2)]


6-6 & 6-7.

let _ = Random.self_init() ;;
let rec _testGenerator n =
let rNum = Random.int n in
if n = 1 then NIL
else begin
let rNum = Random.int 3 in
if rNum = 2 then ONE (_testGenerator (n-1))
else if rNum = 1 then ZERO (_testGenerator (n-1))
else MONE (_testGenerator (n-1))
end ;;
let _test n =
let a = (_testGenerator n) in
let b = (_testGenerator n) in
((crazy2val (crazy2add (a,b))) =
(crazy2val a) + (crazy2val b)) ;;
let _testN n' n =
for a = 0 to n'-1
do (print_string (if (_test n) then "success: #" else "failure: #");
print_int a; print_string "\n") done ;;

이 코드를 붙여넣기 하신 후, (_testN n m) n,m 에 원하는 테스트 길이와 횟수를 입력하시면 됩니다.


6-8.

false = checkMetro (STATION "a");;

true = checkMetro (AREA("a", STATION "a"));;
true = checkMetro (AREA("a", AREA("a", STATION "a")));;
true = checkMetro (AREA("a", AREA("b", CONNECT(STATION "a", STATION "b"))));;
true = checkMetro (AREA("a", CONNECT(STATION "a", AREA("b", STATION "a")))) ;;
true = checkMetro (AREA("a", AREA("b", AREA("c", CONNECT(STATION "a", STATION "c"))))) ;;
true = checkMetro (CONNECT(AREA("a", STATION "a"), (AREA("c", STATION "c")))) ;;

false = checkMetro (AREA("a", STATION "b")) ;;
false = checkMetro (AREA("a", CONNECT(STATION "a", AREA("b", STATION "c")))) ;;
false = checkMetro (AREA("a", AREA("b", CONNECT(STATION "a", STATION "c")))) ;;
false = checkMetro (CONNECT(STATION "a", STATION "c")) ;;
false = checkMetro (AREA("a", AREA("b", CONNECT(STATION "c", AREA("c", STATION "a"))))) ;;
false = checkMetro (CONNECT(AREA("a", STATION "c"), (AREA("c", STATION "c")))) ;;
false = checkMetro (CONNECT(AREA("a", STATION "a"), (AREA("c", STATION "a")))) ;;

전부 true가 나오면 됩니다.
위로
사용자 정보 보기 비밀 메시지 보내기
김유준



가입: 2012년 10월 19일
올린 글: 16

올리기올려짐: 2012년11월17일 13:09    주제: 감사합니다!! 인용과 함께 답변

감사해요 Very Happy
위로
사용자 정보 보기 비밀 메시지 보내기
임성철



가입: 2012년 9월 8일
올린 글: 35

올리기올려짐: 2012년11월17일 20:53    주제: 인용과 함께 답변

감사합니다 Very Happy
위로
사용자 정보 보기 비밀 메시지 보내기
윤형석



가입: 2012년 9월 5일
올린 글: 26

올리기올려짐: 2012년11월19일 16:55    주제: 인용과 함께 답변

6-1 & 6-2에서
https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=3507에 따르면 a20, a21, a22, a23에서 drop을 하는건 잘못된 테스트셋인 것 같네요 Smile
위로
사용자 정보 보기 비밀 메시지 보내기
김나정



가입: 2012년 9월 18일
올린 글: 10

올리기올려짐: 2012년11월20일 1:12    주제: 인용과 함께 답변

정말 감사합니다 Surprised !
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 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