#list #f#
Вопрос:
Я попытался добавить дополнительный элемент в свой список строк. Сначала я подумал о том, чтобы добавить этот пункт в свой список ::
.
let test = ["hello"];;
let newtest = test :: ["world"];;
Это бросило меня в заблуждение:
let newtest = test :: ["world"];;
-----------------------^^^^^^^
stdin(36,24): error FS0001: This expression was expected to have type
'string list'
but here has type
'string'
Это только начало работать @
.
Однако на нескольких вопросах SO для создания нового списка ::
используется метод.
Для того , чтобы использовать ::
, я в конечном итоге создал список списков, который определенно не является тем, что я искал.
let newtest01 = test :: [["world"]];;
val newtest01 : string list list = [["hello"]; ["world"]]
Может кто-нибудь, пожалуйста, объяснить разницу между ними?
Ответ №1:
Оператор ::
(«минусы») используется для построения списков путем добавления (или сохранения) элемента в существующий список. Оператор @
(‘добавить’) используется для объединения двух списков. Вам следует прочитать эту тему.
> let test = ["hello"];;
val test : string list = ["hello"]
> let newTest1 = "world" :: test;;
val newTest1 : string list = ["world"; "hello"]
> let newTest2 = test @ ["world"];;
val newTest2 : string list = ["hello"; "world"]