概要
SATySFiで十進数を十六進数に変換するコマンド \dec2hex
を作りました.
ソースコード
まとめてもいいのですが,別の用途でも使用する必要があり次の2つを用意しました.
再帰函数で変換する部分
let-rec dth n =
if n < 16 then
if n == 0 then `0`
else if n == 1 then `1`
else if n == 2 then `2`
else if n == 3 then `3`
else if n == 4 then `4`
else if n == 5 then `5`
else if n == 6 then `6`
else if n == 7 then `7`
else if n == 8 then `8`
else if n == 9 then `9`
else if n == 10 then `A`
else if n == 11 then `B`
else if n == 12 then `C`
else if n == 13 then `D`
else if n == 14 then `E`
else `F`
else dth (n/16) ^ dth(n mod 16)
intを受け取って十六進数で返しています.
関数を使ったコマンドを定義する部分
let-inline ctx \dec2hex n =
let generateddigits = dth n in
let digits-as-inline-text = embed-string generateddigits in
read-inline ctx digits-as-inline-text
使用例
ソース
hextest.saty
@require: stdjareport
let-rec dth n =
if n < 16 then
if n == 0 then `0`
else if n == 1 then `1`
else if n == 2 then `2`
else if n == 3 then `3`
else if n == 4 then `4`
else if n == 5 then `5`
else if n == 6 then `6`
else if n == 7 then `7`
else if n == 8 then `8`
else if n == 9 then `9`
else if n == 10 then `A`
else if n == 11 then `B`
else if n == 12 then `C`
else if n == 13 then `D`
else if n == 14 then `E`
else `F`
else dth (n/16) ^ dth(n mod 16)
let-inline ctx \dec2hex n =
let generateddigits = dth n in
let digits-as-inline-text = embed-string generateddigits in
read-inline ctx digits-as-inline-text
in
document
(|
title = {10 進数};
author = {Myso Shake};
|)
'<
+p{
\dec2hex(0);
\dec2hex(1);
\dec2hex(2);
\dec2hex(3);
\dec2hex(4);
\dec2hex(5);
\dec2hex(6);
\dec2hex(7);
\dec2hex(8);
\dec2hex(9);
\dec2hex(10);
\dec2hex(11);
\dec2hex(12);
\dec2hex(13);
\dec2hex(14);
\dec2hex(15);
\dec2hex(16);
}
+p
{
\dec2hex(17);
\dec2hex(18);
\dec2hex(19);
\dec2hex(20);
\dec2hex(21);
\dec2hex(22);
\dec2hex(23);
\dec2hex(24);
\dec2hex(25);
\dec2hex(26);
\dec2hex(27);
\dec2hex(28);
\dec2hex(29);
\dec2hex(30);
\dec2hex(31);
\dec2hex(32);
}
>