2016-05-07 9 views
-6

Я пытался использовать List.hd и List.tl для выполнения этой задачи:OCaml: Как я могу вернуть первый элемент списка и после этого удалить его из списка?

let takeCard fst deck = 
fst = List.hd deck 
List.tl deck 

List.hd принимает два аргумента, но я не понимаю, почему.

+0

проверьте это [URL] (http://stackoverflow.com/help), это поможет повысить качество вашего контента. –

+0

'fst = List.hd deck' сравнивает' fst' с первым элементом 'deck' , и игнорирует результат. – molbdnilo

ответ

1

Я думаю, что здесь есть несколько недоразумений.

Во-первых, большинство типов в OCaml являются неизменным. Если вы не используете переменные mutable, вы не можете «удалить их из списка», вы можете вернуть только версию списка, у которой нет этого первого элемента. Если вы хотите вернуть обе вещи, вы можете достичь этого, используя tuple.

let takeCard deck = (List.hd deck, List.tl deck) 

Во-вторых, List.hd требуется только один элемент. OCaml использует currying. При чтении сигнатуры типа OCaml первые параметры - это то, что принимает функция, а последний параметр - то, что возвращает функция. Таким образом, подпись List.hd 'a list -> 'a означает, что он принимает в списке, который содержит ('a используется как заполнитель) и возвращает что-то типа материала, содержащего список (в данном случае первый элемент).

 Смежные вопросы

  • Нет связанных вопросов^_^