てきとう

てきとう

Adaで九九表

どう書く?org「漢数字で九九の表」というのを見つけて、
「そう言えばAdaって受け付ける文字コードがUCSって事になってるんだから普通にできるんじゃね?」
と思ったのでやってみました。
折角だから埋め込み文字列排除(つまり「"」出現禁止)の方向で。

with Ada.Wide_Text_Io, Ada.Strings;
use  Ada.Wide_Text_Io;
procedure Kuku is
   type 漢数字 is (,,,,,,,,,,);
begin
   forin..loop
      forin..loop
         declare:Integer:=漢数字'Pos()*漢数字'Pos();
            十の位:漢数字:=漢数字'Val(/漢数字'Pos());
            一の位:漢数字:=漢数字'Val(rem 漢数字'Pos());
         begin
            if 十の位/=then
               Put(漢数字'Wide_Image(十の位));
            else
               Put(Ada.Strings.Wide_Space&Ada.Strings.Wide_Space);
            end if;
            Put(漢数字'Wide_Image(一の位));
            Put(Ada.Strings.Wide_Space&Ada.Strings.Wide_Space);
         end;
      end loop;
      New_Line;
   end loop;
end Kuku;

ARM読んでも、結局discrete type*1の要素数を得る属性が分からなかったので、漢数字は十まで。

% gnatmake kuku
gcc -c kuku.adb
kuku.adb:4:10: illegal character
kuku.adb:6:09: illegal character
kuku.adb:7:12: illegal character
kuku.adb:9:14: illegal character
kuku.adb:10:13: declaration expected
kuku.adb:10:14: illegal character
kuku.adb:11:13: declaration expected
kuku.adb:11:14: illegal character
kuku.adb:13:17: illegal character
kuku.adb:14:21: illegal character
kuku.adb:18:18: illegal character
gnatmake: "kuku.adb" compilation error

って通らないし……。


ytさんのAdaサンプル集や、gnatmake -gnathによると、どうやらASCII以外を通すには-gnatWが必要なようです。

% gnatmake -gnath
Usage: gnatmake  opts  name  {[-cargs opts] [-bargs opts] [-largs opts] [-margs opts]}
(略)
  -gnatW    Wide character encoding method (h/u/s/e/8/b)

UTF-8だから、-gnatW8なのかな?
他が気になるけど…まぁUTF-8以外使わないので気にしない事にします。*2

% gnatmake -gnatW8 kuku
gcc -c -gnatW8 kuku.adb
gnatbind -x kuku.ali
gnatlink kuku.ali

おお、ちゃんとコンパイル通りますね。

% ./kuku
  一    二    三    四    五    六    七    八    九  
  二    四    六    八  一〇  一二  一四  一六  一八  
  三    六    九  一二  一五  一八  二一  二四  二七  
  四    八  一二  一六  二〇  二四  二八  三二  三六  
  五  一〇  一五  二〇  二五  三〇  三五  四〇  四五  
  六  一二  一八  二四  三〇  三六  四二  四八  五四  
  七  一四  二一  二八  三五  四二  四九  五六  六三  
  八  一六  二四  三二  四〇  四八  五六  六四  七二  
  九  一八  二七  三六  四五  五四  六三  七二  八一  
%

できたー!


ここまで書いて、そう言えば「どう書く?」のアカウント持ってる事を思い出しましたが…
今からそっちにも投稿するのも面倒だからいいかな…。

*1:日本語だと「離散型」?

*2:http://hp.vector.co.jp/authors/VA028375/ada/log.html(これまたytさんのAdaのページ)によると、sがShift-JIS、eがEUCらしいです。…ytさんには頭が上がりません。