Haskell: Где vs . Let

Это работает:

Iterator<Integer> iter = l.iterator();
while (iter.hasNext()) {
    if (iter.next() == 5) {
        iter.remove();
    }
}

я предположил, что, так как цикл foreach является синтаксическим сахаром для итерации, использование итератора не помогло бы..., но это дает Вам этот .remove() функциональность.

108
задан nbro 26 February 2017 в 13:38
поделиться

1 ответ

К сожалению, большинство ответов здесь является слишком техническим для новичка.

LHYFGG имеет соответствующую главу по нему - который необходимо считать, если Вы уже не имеете, но в сущности:

  • where просто синтаксическая конструкция (не сахар ), которые являются полезны только в функциональных определениях .
  • let ... in , само выражение , таким образом можно использовать их везде, куда можно поместить выражение. Будучи самим выражением, это не может использоваться для обязательных вещей для защиты.

Наконец, можно использовать let в пониманиях списка также:

calcBmis :: (RealFloat a) => [(a, a)] -> [a]
calcBmis xs = [bmi | (w, h) <- xs, let bmi = w / h ^ 2, bmi >= 25.0]
-- w: width
-- h: height

Мы включаем , позволяют внутренняя часть понимание списка во многом как, мы были бы предикат, только она не фильтрует список, она только связывает с именами. Имена определили во внутренней части, которой позволяют, понимание списка видимо к функции вывода (часть перед |) и все предикаты и разделы, которые прибывают после привязки. Таким образом, мы могли сделать наш функциональный возврат только BMIs людей> = 25:

1
ответ дан 24 November 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: