Ocaml Удалить элемент из списка - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь удалить данный элемент (x) из списка

let rec remove x list =
  match list with
  | [] -> []
  | var :: tail -> match var with
    | x -> remove x tail
    | _ -> var :: (remove x tail)
;;

Это то, что я сделал до сих пор, но когда я пытаюсь

remove 5 [1;2;3;4;5]

этовозвращает пустой список [].

1 Ответ

0 голосов
/ 05 февраля 2019

Это match не делает то, что вы думаете:

match var with
    | x -> remove x tail
    | _ -> var :: (remove x tail)

x здесь представляет собой шаблон, состоящий из идентификатора (имени).Этот тип шаблона соответствует всем возможным значениям и привязывает имя к значению.

Таким образом, ваш шаблон соответствует постоянно и, следовательно, ваш список пуст.

Вы не можете использоватьшаблон для сопоставления со значением переменной, например x.Вы можете сравнивать только с фиксированными значениями, такими как 3 или Нет.

Вы должны использовать оператор if, чтобы проверить, равно ли var x.

...