Выражения регистра и количество параметров «перегрузки»

#pattern-matching #sml #ml #case-expression

#сопоставление с образцом #sml #ml #выражение регистра

Вопрос:

Я новичок в ML и хотел использовать выражения прецедентов и сопоставление с образцом следующим образом.

 fun myFun(a,b) = myFun(a,b,[])
|   myFun(a,b,c) = (*do something here*)
|   myFun(a,b,d) = (*do something here as well*);
  

итак, возможно ли иметь разное количество параметров, как указано в этом примере?

Спасибо.

Ответ №1:

Все функции ML принимают ровно один параметр, даже если этот параметр является кортежем.

(Программисты ML иногда говорят о «множественных» параметрах, слегка злоупотребляя терминологией. Это не означает совсем то же самое, что и в других языках, и то, что считается «множественным» или нет, является скорее вопросом перспективы, чем синтаксиса.)

Все предложения в определении также должны иметь один и тот же тип, поэтому все ваши предложения должны иметь тот же тип кортежа, что и их параметр.

Похоже, вы стремитесь к чему-то вроде «аргументов по умолчанию», которые есть в некоторых языках, но в стандартном ML такого нет.