class
APPLICATION
inherit
ARGUMENTS
create
make
feature -- Initialization
make is
-- Run application.
local
l_fact: NATURAL_64
do
l_fact := factorial(argument(1).to_natural_64)
print("Result is: " + l_fact.out)
end
factorial(n: NATURAL_64): NATURAL_64 is
--
require
positive_n: n >= 0
do
if n = 0 then
Result := 1
else
Result := n * factorial(n-1)
end
end
end -- class APPLICATION
Как отмечали другие, ваша главная ошибка здесь заключается в путанице латинских и кириллических шрифтов и некоторых глифов в них (а именно C ( U + 0043 ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА C ) и С. ( U + 0421 КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ES )). Есть много таких пар символов, которые похожи друг на друга, но являются разными персонажами. Вы найдете много, например, латинского, греческого и кириллического языков. Однако в большинстве случаев они работают только в верхнем или нижнем регистре.
Однако есть на самом деле дубликаты, иногда намеренно. Например, весь латинский алфавит (ASCII) снова представлен дважды в блоке Unicode «Halfwidth and Fullwidth Forms» между U + FF00 и U + FFEF. Но есть и другие подобные примеры, особенно в разделе математического алфавита на уровне 1, где присутствуют еще три или четыре латинских алфавита.
Есть и другие вещи, которые фактически представляют собой тот же символ, но в разных кодовых точках. Например, есть µ ( U + 00B5 МИКРОЗНАК ) и μ ( U + 03BC ГРЕЧЕСКАЯ СТРОЧНАЯ БУКВА MU ). Обычно они связаны с помощью разложения .
Unicode имеет дело с абстрактной концепцией, называемой кодовой точкой . Кодовая точка однозначно определяет персонажа и его сценарий или группу. В нем ничего не говорится о том, как будет отображаться соответствующий глиф в шрифте (который уже может сильно различаться для латиницы). Он также не определяет, как эта кодовая точка представлена в файле или в памяти (т. Е. Как последовательность байтов). Который' sa для одного из форматов преобразования Unicode .
Какова причина иметь похожий вид символа на двух языках с разными кодовыми точками?
Вот основные моменты Unicode:
Таким образом, есть очень сильный стимул хранить скрипты отдельно и не пытаться отображать символы в соответствии с их внешним видом . В любом случае внешность может быть сложной. Возьмем, например, кириллическую букву «т», которая здесь выглядит как маленькая латинская буква T в верхнем регистре. Однако обычно он отображается курсивом: 'т' выглядит как строчная латинская 'm'. Вы действительно не хотите отображать таких персонажей по внешнему виду.
Если вы посмотрите на таблицу кодов U + 0400 - U + 04FF , вы обнаружите, что U + 0421 - это заглавная буква кириллицы «es». Он может выглядеть как латинский C, но это другой логический символ.
Буквы выглядят одинаково, но очень разные. U + 0043 - латинская буква C, а U + 0421 - это кириллица С (которая соответствует букве S в латинском алфавите).
Из-за их несвязанных значений требуются отдельные кодовые точки, чтобы предотвратить регистрацию и алгоритмы сортировки ужасно контекстно-зависимый - вам внезапно придется угадывать, с каким языком вы имеете дело.
По той же причине, что 0
и O
выглядят одинаково (в большинстве шрифтов с одинарным интервалом), но кодируются по-разному - они означают разные вещи.
U + 0043
- это латинское представление C
, а U + 0421
- кириллица, то есть на самом деле они не совпадают. письмо, даже если оно может выглядеть так же.