В качестве хобби-проекта я разрабатывал IDE для Chef , эзотерического языка программирования. При написании различных тестовых программ в Chef я понял, что реализация простого алгоритма сортировки или даже сравнение двух целых чисел, чтобы определить, какое из них больше, является серьезной проблемой, когда единственным оператором сравнения и ветвления в языке является цикл, который будет повторяться, пока число не равно нулю. Например:
Dissolve the sugar. <-- execute loop if value of 'sugar' is non zero
Add flour to mixing bowl. <-- add value of 'flour' into mixing bowl
Set aside. <-- break out of the loop
Stir until dissolved. <-- mark the end of the loop
У меня есть рабочее решение для сравнения двух целых чисел в Chef, но оно длиной 40 строк!
Вот эквивалент моего подхода на Java, который большинство найдет более читабельным, чем код Chef, который я написал: -)
public static void main(String[] args) {
int first = 100;
int second = 200;
int looper = 1;
int tester;
int difference = first - second;
int inverse = difference * -1;
while (looper != 0) {
difference -= 1;
inverse -= 1;
tester = 1;
while (difference != 0) {
tester--;
break;
}
while (tester != 0) {
System.out.println("First is bigger");
exit(1);
}
tester = 1;
while (inverse != 0) {
tester--;
break;
}
while (tester != 0) {
System.out.println("Second is bigger");
exit(1);
}
}
}
Мой вопрос: каков наилучший способ сравнения двух чисел, когда у меня есть только цикл, отличный от нуля?