Как я использую сопоставление с образцом в определениях, которым 'позволяют'?

Если ваш учитель использует новые функциональные интерфейсы Java 8, он, вероятно, хочет, чтобы вы использовали лямбды Java 8. Вот краткое руководство.

10
задан Juliet 18 January 2009 в 17:46
поделиться

2 ответа

JaredPar является правильным, F# не имеет синтаксической формы, которую Haskell делает здесь.

Форма F# главным образом полезна для раскрытия дизъюнктных объединений единственного случая или для определения функций с неполными соответствиями (как Ваш 'автомобильный' пример, который перестал работать в пустом списке). Это - просто последствие того, что практически вся привязка имени на языке сделана через шаблоны; эта синтаксическая форма (определяющий функцию с помощью шаблонов на аргументах) не часто слишком полезна на практике по точной причине, которую Вы описали.

Я думаю, что Haskell сделал много вещей лучше, чем ML когда дело доходит до синтаксических форм, но корни F# находятся в ML. Преимущество - то, что хорошее подмножество F# кросс-компилирует с OCaml (который помог загрузить язык F# и пользовательское сообщество); недостаток состоит в том, что F# застревает с несколькими битами ужасного/ограниченного синтаксиса.

9
ответ дан 3 December 2019 в 15:22
поделиться

AFAIK, нет никакого пути в F# для объявления нескольких привязки, которой позволяют, с тем же именем и различными подписями сопоставления с образцом. Я верю самой близкой конструкции к тому, что Вы ищете, выражение правил функции.

Возьмите этот пример для автомобиля

let car = function
    | hd::tl -> hd
    | [] -> failwith "empty list"
12
ответ дан 3 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

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