Ио Язык Фибоначчи Проблемы
Я работаю над проблемой Ио, которая включает последовательность Фибоначчи. Я пытаюсь создать метод, который проверяет, является ли число числом Фибоначчи или нет. Я не могу понять, почему мой метод IsAFib не работает, кто-нибудь знает, почему и что я могу сделать, чтобы это исправить? Я действительно новичок в Ио, и довольно новичок в программировании, поэтому, если бы вы могли описать причины вашего изменения, я был бы очень признателен! Я хочу знать, чем это должно отличаться, а не только тем, что должно быть написано.
OperatorTable addOperator("xor", 11)
true xor := method(bool, if(bool, false, true))
false xor := method(bool, if(bool, true, false))
doFile("isASquare.io");
Затем файл isASquare.io:
isASquare := method(n,
for(i, 1, n,
if(i * i == n, return true)
if(i * i > n, return false)
)
)
isAFib := method(n,
if(isASquare(2 ** 5 * n) xor isASquare(2 ** n * 5 - 4), return true, return false)
)
1 ответ
Так что это проблема, которая возникает время от времени. Динамические операторы работают так, что когда vm загружает исходный файл, прежде чем мы оценим какой-либо из них, мы применяем правила, которые окружают операторы. При первом запуске io знает только о встроенных операторах. Как только это переупорядочение сообщений будет выполнено, мы начнем оценивать код в файле, то есть сначала эту строку:
OperatorTable addOperator("xor", 11)
К тому времени, когда этот код будет запущен, уже слишком поздно, чтобы иметь какое-либо влияние на этот файл.
Общее согласие в сообществе состоит в том, чтобы поместить всех ваших операторов в файл, который вы загружаете первым, а в конце этого файла, иметь его doFile()
или аналогичным образом он загружает ваш основной файл, который будет их использовать.
Это немного больно в заднице, но в Io нет традиционного времени компиляции.