kOS - програмируемый автопилот

  1. Оффлайн

    PAPIK-77

    Посетители

    Сообщений: 47

    Reistlyn,
    по НОП не в курсе что это. Но по WHEN/THEN понял, что это отдельный тригер который проверяется всегда. Даже при выполнении остальной программы( в отличии от UNTIL). И при выполнении условия один раз успокаивается, если не вставить PRESERVE. При PRESERVE проверяется всегда. Насколько я понял это очень быстрый тригер который не терпит ни каких задержек.
    Всё ИМХО конечно.
    20 декабря 2015 - 22:45 / #281
  2. Оффлайн

    Finn

    Хорошие люди

    Сообщений: 1291

    А зачем собственно так сложно? Почему не пишешь к примеру
    IF STAGE:OXIDIZER<1 {WAIT 1.STAGE.}

    Зачем такой здоровый участок кода?

    Летать и строить. Строить и летать.

    20 декабря 2015 - 22:45 / #282
  3. Оффлайн

    Lynx

    Модераторы

    Сообщений: 2844

    Reistlyn, из-за PRESERVE WHEN длится один физический кадр и запускается наново, никакая цепочка нопов не выживет. А если выживет, то это будет беспощадный вариант, потому что WHEN полностью отбирает процессор и работает до прерывания, то есть WAIT 1 просто выдаст лаг в 1 секунду, а такие лаги после каждого кадра это проверка пользователя на нервность ))
    http://ksp-kos.github.io/KOS_DOC/general/cpu_hardware.html

    Надо пробовать передавать управление внешней команде у которой нет таких ограничений.
    20 декабря 2015 - 22:48 / #283
  4. Оффлайн

    PAPIK-77

    Посетители

    Сообщений: 47

    Finn писал:
    STAGE:OXIDIZER

    STAGE:OXIDIZER а у меня там гидрозин... а во второй ступени ещё, чего нибудь, и никакого ликвидфуела или оксигена. Как быть? И вообще то это ничего(ИМХО) не решает. Ступень отлетит также одномоментно при завершении работы. А мне нужна пауза.
    20 декабря 2015 - 22:56 / #284
  5. Оффлайн

    Finn

    Хорошие люди

    Сообщений: 1291

    PAPIK-77 писал:
    IF STAGE:OXIDIZER<1 {WAIT 1.STAGE.}

    Запихиваешь это все под Until и всё.
    Так чем вариант этот не подходит?

    К слову в гайде не написал, что для бесконечных циклов в конце цикла лучше писать Wait 0.1. хотя бы, что бы память особо кОС не жрал и артефактов чтоб не выкидывал.

    Летать и строить. Строить и летать.

    20 декабря 2015 - 22:57 / #285
  6. Оффлайн

    Finn

    Хорошие люди

    Сообщений: 1291

    PAPIK-77, так я для чего дизъюнкцию объяснял
    IF STAGE:OXIDIZER < 1 OR STAGE:*НАЗВАНИЕ ТОПЛИВА* <1

    суть ясна?

    Летать и строить. Строить и летать.

    21 декабря 2015 - 00:00 / #286
  7. Оффлайн

    Lynx

    Модераторы

    Сообщений: 2844

    Finn, я там в каментах отписал, а ты игноришь - нужно добавить описание оператора NOT, без него скучно и многоэтажные конструкции не получаются.
    21 декабря 2015 - 00:41 / #287
  8. Оффлайн

    Finn

    Хорошие люди

    Сообщений: 1291

    Lynx, я не 247 сижу и мониторю:) Добавлю)

    Только завтра сначала протестирую. Не могу же я не проверенно по памяти со старой версии написать.
    Сообщение отредактировал Finn 21 декабря 2015 - 00:56

    Летать и строить. Строить и летать.

    21 декабря 2015 - 00:52 / #288
  9. Оффлайн

    Lynx

    Модераторы

    Сообщений: 2844

    Finn, ну мало ли, вдруг не заметил в той стене )
    А неявное приведение типов? Ну там IF 3 PRINT "YES"
    Сообщение отредактировал Lynx 21 декабря 2015 - 01:01
    21 декабря 2015 - 00:56 / #289
  10. Оффлайн

    Silver

    Модераторы

    Сообщений: 2844

    Lynx, не понял, что должна эта команда выполнить?
    21 декабря 2015 - 01:05 / #290
  11. Оффлайн

    Lynx

    Модераторы

    Сообщений: 2844

    Silver, так как 3 > 0, то условие истинно и команда напечатает YES. По крайней мере на прокатывает на ура.
    Сообщение отредактировал Lynx 21 декабря 2015 - 01:07
    21 декабря 2015 - 01:07 / #291
  12. Оффлайн

    Silver

    Модераторы

    Сообщений: 2844

    Аа. Ни, так не сработает, слишком "не явное" условие. Нужно задать конкретику. set x to 3. if x > 0 print "YES".
    21 декабря 2015 - 01:10 / #292
  13. Оффлайн

    Lynx

    Модераторы

    Сообщений: 2844

    Silver, ну я думал о таких милых штучках как IF MAXTHRUST PRINT "топливо еще есть"
    Сообщение отредактировал Lynx 21 декабря 2015 - 01:16
    21 декабря 2015 - 01:15 / #293
  14. Оффлайн

    Silver

    Посетители

    Сообщений: 4

    А это можно, MAXTHRUST и ей подобные - фиксированные переменные - т.е. они перманентно "залочены". Но условие все равно нужно конкретизировать. Больше, меньше, равно.

    Fear Factory Inc.

    21 декабря 2015 - 01:22 / #294
  15. Оффлайн

    Lynx

    Модераторы

    Сообщений: 2844

    Silver, ты просто не проникся идеей :) Пока есть топливо MAXTHRUST > 0 по определению, следовательно его значение уже истинно.
    Но, как мне тут подсказывают в обсуждении статьи, булевы переменные в КОСе имеют на удивление строковый тип и такой номер не пройдет.
    21 декабря 2015 - 01:33 / #295
  16. Оффлайн

    Silver

    Модераторы

    Сообщений: 3122

    там тебе немного неверно подсказывают. Они имеют булевый тип 1 да 0 (ну или true, false, что суть не важно - оно просто на печать в таком виде выводится) и со строками не складываются. Команда принт просто позволяет вывести на экран вместе любой тип переменных. Но вот сложить, сравнить текст со скалярными или с булевыми не выйдет. Тот же MAXTHRUST - скалярен. В логике kOS он тупо не может быть истинным или ложным. Его значение - есть его значение, числовое его выражение.
    Сообщение отредактировал Silver 21 декабря 2015 - 01:46

    21 декабря 2015 - 01:45 / #296
  17. Оффлайн

    Lynx

    Модераторы

    Сообщений: 2844

    никому верить нельзя :(
    21 декабря 2015 - 02:12 / #297
  18. Оффлайн

    Silver

    Посетители

    Сообщений: 179

    Если честно, это какой-то трэш. Особо не ругайся - я как раз из тех, кто про мат.логику лишь слышал. Ну, ладно, больше, чем слышал, но уже давненько. Ежели сможешь объяснить почему так - буду рад.

    Итак, с 5>3, 5<3 все понятно - сравниваются скалярные величины, в ответ выдается булевая переменная (1/0, выраженная текстом), здесь все ок.

    Но! В первых двух примерах, оно что, кол-во символов во фразе со скалярной величиной сравнивает? Это что за бред? Не, я конечно все понимаю, мат.логика, то се, а нормальная логика сдохла, да? Это, в смысле, не к тебе претензия, я просто не знал, что так можно и точно бы никогда не догадался проверить. Мне бы в голову не пришло сравнивать число и считать буквы в текстовой переменной. При необходимости я бы именно посчитал символы, задал скалярной переменной эту величину и уже ее сравнивал. Долго, не вопрос, но логично!

    Это как пример Lynx с тягой, но там все понятно, просто тяга не булевая, а вполне себе конкретная скалярная величина. Если бы ее значений было 2 - тяга есть 1 (true) тяги нет 0 (false), тогда все ок. If тяга {print "Мужики, тащи канистру, сливать соляру будем!".} else {print "вот Михалыч *****! Уже спер!".}

    С последними четырьмя примерами все ок и моим словам нисколько не противоречат. Мы не сравниваем текстовые переменные и булевые. Сравнивается текстовое отображение булевой переменной. Не более. Тоже забавно, конечно, но по крайней мере не вынос мозга.
    Сообщение отредактировал Silver 21 декабря 2015 - 04:12

    :: 0.13.3, 0.14.4, 0.23, 0.25, 0.90, 1.0.4, 1.3.1! ::

    21 декабря 2015 - 04:01 / #298
  19. Оффлайн

    Gonzales_Gonzo

    Посетители

    Сообщений: 6

    Silver, я не программист по образованию, чтобы хорошо объяснить без досадных неточностей, но, думаю, все подробности можно найти в гугле по "неявное приведение типа" или в общем виде на вики .

    Т.е. многие операторы по умолчанию могут поддерживать работу с переменными различных типов, по своим правилам преобразуя их для получения корректного результата. Как это реализовано внутри kOS - в доках не нашел, возможно пошли своим путём или же притянули особенности C#.

    Так же С#, например, поддерживает перегрузку операторов, тогда можно определять реакцию > или < на переменные различных типов и правила преобразования.
    P.S.
    Покопался бегло в исходниках, нашел только в одном месте(./src/kOS/Suffixed/Timespan.ks) перегрузку булевых операторов, но оно сделано для класса TimeSpan, который про время и всё такое, не наш случай.

    Сообщение отредактировал Gonzales_Gonzo 21 декабря 2015 - 14:02
    21 декабря 2015 - 13:24 / #299
  20. Оффлайн

    Finn

    Хорошие люди

    Сообщений: 1291

    Очень уж странно, что из Траста команда только MAXTHRUST есть. Не понимаю что вам всё именно макстраст покоя не даёт. Я же привел пример как проще можно сделать.

    Летать и строить. Строить и летать.

    21 декабря 2015 - 13:38 / #300

Статистика форума, пользователей онлайн: 1 (за последние 10 минут)

M. Gordon

Администраторы | Модераторы | Хорошие люди | Посетители | Новичок

Создано тем1933 Всего сообщений158043 Пользователей19232 Новый участникСпатик
Loading...

Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите Ctrl+Alt