ключевое слово - FFL: где против пусть - PullRequest
0 голосов
/ 22 мая 2018

Я пытался понять следующий код:

    def() ->commands
        if(deferred_passive_abilities != [],
           let [{ability: class passive_ability, creature: class creature}] items = [];
           let found = false;
           map(deferred_passive_abilities,
             if(cmd = null, add(items, [value]), [cmd, set(found, true)])
             where cmd = value.ability.static_effect(me, value.creature));

           if(found,
              set(deferred_passive_abilities, items);
              evaluate_deferred_passive_abilities(),
              set(deferred_passive_abilities, []))
        )

Похоже, что в Haskell есть и let, и where, но я не многому научился, поверхностно читая их документы по Haskell.У них также есть let...in, что я не понял, но было бы хорошо узнать, есть ли у FFL это.

Итак, каково значение использования let против where?Нужно ли было использовать let здесь?(Также возможно другой вопрос: зачем нужны эти точки с запятой?)

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Использование let представляет переменную, которая может быть изменена.Обратите внимание, как found и items изменены.Напротив, where всегда вводит неизменяемые символы.

Точки с запятой используются в FFL для создания конвейера команд .Обычно в FFL вся формула оценивается , что приводит к команде или списку команд, а затем команды выполняются .

Когда точка с запятойВ настоящее время все до точки с запятой рассматривается как отдельная формула для всего после точки с запятой.Первая формула оценивается и выполняется , а затем вторая формула оценивается и выполняется.

Точка с запятой эффективно позволяет гораздо более процедурный стиль программирования в FFL, безточка с запятой это чисто функциональный язык.

0 голосов
/ 22 мая 2018

Никогда не знал о let в FFL до этого, должно быть очень редко.

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

Это большая разница с where, который не нуждается в точках с запятой.

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

...