| 민현기 
 
 
 가입: 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가 나오면 됩니다.
 |  |