ifとcase
昨日の件ですが。
基礎体力強化月間?として、引き続き基本的な部分を確認。
例が悪い(通常は行わない)けど、ネストした時の記述方法も確認。
ネストした時の記述方法に悩みましたが、大体30分くらいでした。
アフォみたいに確認してますが、練習という事で勘弁を。
% less -N ./test.erl 1 -module( test ). 2 -export( [testIf/1, testIf/2, testIf/3, testCase/1, testCase/2, testCase/3] ). 3 4 testIf( X ) -> 5 Y = 2, 6 if X == 1 -> io:fwrite( "X is [1].\n" ); 7 X == '1' -> io:fwrite( "X is ['1'].\n" ); 8 X == "1" -> io:fwrite( "X is [\"1\"].\n" ); 9 X == Y -> io:fwrite( "X is [2].\n" ); 10 X == 'Y' -> io:fwrite( "X is ['Y'].\n" ); 11 X == "Y" -> io:fwrite( "X is [\"Y\"].\n" ); 12 true -> io:fwrite( "X is [???].\n" ) 13 end. 14 15 testIf( X, Y ) -> 16 Z = 2, 17 if X == 1 -> 18 if Y == Z -> io:fwrite( "X is [1] and Y is [2].\n" ); 19 Y == '2' -> io:fwrite( "X is [1] and Y is ['2'].\n" ); 20 Y == "2" -> io:fwrite( "X is [1] and Y is [\"2\"].\n" ); 21 true -> io:fwrite( "X is [1] and Y is [???].\n" ) 22 end; 23 true -> io:fwrite( "X is [???].\n" ) 24 end. 25 26 testIf( X, Y, Z ) -> 27 if X == 1 -> 28 if Y == Z -> io:fwrite( "X is [1] and Y is [2].\n" ); 29 true -> io:fwrite( "X is [1] and Y is [???].\n" ) 30 end 31 end. 32 33 testCase( X ) -> 34 Y = 2, 35 case X of 36 1 -> io:fwrite( "X is [1].\n" ); 37 '1' -> io:fwrite( "X is ['1'].\n" ); 38 "1" -> io:fwrite( "X is [\"1\"].\n" ); 39 Y -> io:fwrite( "X is [2].\n" ); 40 'Y' -> io:fwrite( "X is ['Y'].\n" ); 41 "Y" -> io:fwrite( "X is [\"Y\"].\n" ); 42 _ -> io:fwrite( "X is [???].\n" ) 43 end. 44 45 testCase( X, Y ) -> 46 Z = 2, 47 case X of 48 1 -> 49 case Y of 50 Z -> io:fwrite( "X is [1] and Y is [2].\n" ); 51 '2' -> io:fwrite( "X is [1] and Y is ['2'].\n" ); 52 "2" -> io:fwrite( "X is [1] and Y is [\"2\"].\n" ); 53 _ -> io:fwrite( "X is [1] and Y is [???].\n" ) 54 end; 55 _ -> io:fwrite( "X is [???].\n" ) 56 end. 57 58 testCase( X, Y, Z ) -> 59 case X of 60 1 -> 61 case Y of 62 Z -> io:fwrite( "X is [1] and Y is [2].\n" ); 63 _ -> io:fwrite( "X is [1] and Y is [???].\n" ) 64 end 65 end. % /usr/bin/erl Erlang (BEAM) emulator version 5.5.2 [source] [async-threads:0] [kernel-poll:false] Eshell V5.5.2 (abort with ^G) 1> c("./test.erl" ). {ok,test} 2> test:testIf( 1 ). X is [1]. ok 3> test:testIf( '1' ). X is ['1']. ok 4> test:testIf( "1" ). X is ["1"]. ok 5> test:testIf( 2 ). X is [2]. ok 6> test:testIf( '2' ). X is [???]. ok 7> test:testIf( "2" ). X is [???]. ok 8> test:testIf( 'Y' ). X is ['Y']. ok 9> test:testIf( "Y" ). X is ["Y"]. ok 10> test:testIf( 1, 2 ). X is [1] and Y is [2]. ok 11> test:testIf( 1, '2' ). X is [1] and Y is ['2']. ok 12> test:testIf( 1, "2" ). X is [1] and Y is ["2"]. ok 13> test:testIf( 1, 3 ). X is [1] and Y is [???]. ok 14> test:testIf( 2, 1 ). X is [???]. ok 15> test:testIf( 1, 2, 2 ). X is [1] and Y is [2]. ok 16> test:testIf( 1, 2, 3 ). X is [1] and Y is [???]. ok 17> test:testIf( 2, 1, 1 ). =ERROR REPORT==== 14-May-2007::21:38:19 === Error in process <0.30.0> with exit value: {if_clause,[{test,testIf,3},{shell,exprs,6},{shell,eval_loop,3}]} ** exited: {if_clause,[{test,testIf,3},{shell,exprs,6},{shell,eval_loop,3}]} ** 18> test:testCase( 1 ). X is [1]. ok 19> test:testCase( '1' ). X is ['1']. ok 20> test:testCase( "1" ). X is ["1"]. ok 21> test:testCase( 2 ). X is [2]. ok 22> test:testCase( '2' ). X is [???]. ok 23> test:testCase( "2" ). X is [???]. ok 24> test:testCase( 'Y' ). X is ['Y']. ok 25> test:testCase( "Y" ). X is ["Y"]. ok 26> test:testCase( 1, 2 ). X is [1] and Y is [2]. ok 27> test:testCase( 1, '2' ). X is [1] and Y is ['2']. ok 28> test:testCase( 1, "2" ). X is [1] and Y is ["2"]. ok 29> test:testCase( 1, 3 ). X is [1] and Y is [???]. ok 30> test:testCase( 2, 1 ). X is [???]. ok 31> test:testCase( 1, 2, 2 ). X is [1] and Y is [2]. ok 32> test:testCase( 1, 2, 3 ). X is [1] and Y is [???]. ok 33> test:testCase( 2, 1, 1 ). =ERROR REPORT==== 14-May-2007::21:39:09 === Error in process <0.52.0> with exit value: {{case_clause,2},[{test,testCase,3},{shell,exprs,6},{shell,eval_loop,3}]} ** exited: {{case_clause,2}, [{test,testCase,3},{shell,exprs,6},{shell,eval_loop,3}]} **
ふーむ。興味深い。時間が無いので今日はココまで。
もう少し基本的な部分を確認してみたい。