ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

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}]} **

ふーむ。興味深い。時間が無いので今日はココまで。
もう少し基本的な部分を確認してみたい。