Что делает: инфиксный оператор делает в Haskell?

Если так, почему?

C имеет, не мультивыравниваются/маркируют повреждение, и не все потоки управления может быть легко смоделирован с примитивами повторения и решения C. gotos имеют большое значение для возмещения этих дефектов.

Иногда это более ясно использовать переменную флага некоторого вида для осуществления своего рода псевдомногоуровневого повреждения, но это не всегда выше goto (по крайней мере, goto позволяет тому легко определять, куда управление переходит в, в отличие от переменной флага), и иногда Вы просто не хотите платить цену производительности искривлений флагов/других для предотвращения goto.

libavcodec является чувствительной к производительности частью кода. Прямое выражение потока управления является, вероятно, приоритетом, потому что это будет иметь тенденцию работать лучше.

44
задан moo 8 November 2009 в 14:45
поделиться

4 ответа

: - оператор добавления:

x : xs

Возвращает список, в котором первым элементом x являются все элементы в xs . В других функциональных языках это обычно называется cons , потому что оно «cons» рекурсивно сокращает список путем повторения приложения из пустого списка:

1 : 2 : 3 : 4 : []

- это список [1, 2, 3, 4] .

72
ответ дан 26 November 2019 в 21:47
поделиться

С точки зрения дизайна, мне нравится идея возврата

'a list option

, где, например,

None              // it did not match
Some[]            // matched, input had 0 wildcards
Some["foo";"bar"] // matched, input has 2 wildcards, "foo" matched 1st, "bar" 2nd

То есть просто гарантировать, что при возврате Some, длина списка равно количеству подстановочных знаков, а элементы списка соответствуют по порядку. Мне кажется, это просто реализовать, а также разумно для клиентского кода использовать / потреблять.

(Я не понимаю, есть ли в вашем длинном посте более глубокий вопрос.)

Похоже, забавный материал!

] РЕДАКТИРОВАТЬ

Вот обновленный код. Моя интуиция подсказывает мне, что это не все правильно, но, по крайней мере, это работает на ваших примерах. Ключевым моментом является использование

'a list list option

, поскольку «a - это символ, а» список подобен строке, а нам нужен список строк. singleMatch запускает новый список строк, тогда как longMatch занимает начало текущей строки.

22
ответ дан 26 November 2019 в 21:47
поделиться

Оператор: в Haskell является конструктором списков. Он «объединяет» все, что стоит перед двоеточием, в список, указанный после него.

Например, список целых чисел создается путем «включения» каждого числа в пустой список, например:

Список [ 1,2,3,4] может быть построено следующим образом:

  • 4: [] (состоит из 4 в пустой список)
  • 3: [4] (состоит из 3 в список, содержащий 4)
  • 2: [ 3,4] (составляет 2 в списке, содержащем 3, 4)
  • 1: [2,3,4] (занимает 1 в списке, содержащем 2,3,4)

дает вы;

[1,2,3,4]

Написано полностью,

1 : 2 : 3 : 4 : []
15
ответ дан 26 November 2019 в 21:47
поделиться

Это конструктор типов для списков. Он не отличается от любого другого конструктора типов, например Just или Left , за исключением того, что это инфиксный. Допустимые конструкторы типов могут быть словами, начинающимися с заглавной буквы, или символами, начинающимися с двоеточия.

Таким образом, вы можете определять конструкторы инфиксов для ваших собственных типов данных. Например:

data MyList a = a :> MyList a
              | Empty

в приведенном выше коде мы определяем тип с именем MyList с двумя конструкторами: первый - это конструктор странного вида :> , который принимает элемент, а другой ] MyList a ; второй - пустой конструктор Empty , который эквивалентен [] в собственных списках Haskell.

Приведенное выше эквивалентно:

data MyList a = Cons a  (MyList a)
              | Empty
11
ответ дан 26 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

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