Я думаю, что здесь есть несколько недоразумений.
Во-первых, большинство типов в OCaml являются неизменным. Если вы не используете переменные mutable, вы не можете «удалить их из списка», вы можете вернуть только версию списка, у которой нет этого первого элемента. Если вы хотите вернуть обе вещи, вы можете достичь этого, используя tuple.
let takeCard deck = (List.hd deck, List.tl deck)
Во-вторых, List.hd требуется только один элемент. OCaml использует currying. При чтении сигнатуры типа OCaml первые параметры - это то, что принимает функция, а последний параметр - то, что возвращает функция. Таким образом, подпись List.hd 'a list -> 'a
означает, что он принимает в списке, который содержит ('a
используется как заполнитель) и возвращает что-то типа материала, содержащего список (в данном случае первый элемент).
проверьте это [URL] (http://stackoverflow.com/help), это поможет повысить качество вашего контента. –
'fst = List.hd deck' сравнивает' fst' с первым элементом 'deck' , и игнорирует результат. – molbdnilo