F # если список операторов.существует

#list #if-statement #f# #exists #elements

#Список #if-оператор #f# #существует #элемент

Вопрос:

Это школьное задание, но все, что я собираюсь опубликовать, сделано мной и только мной. Поэтому мне нужна ваша помощь только для крошечного шага в моем задании, на котором я застрял.

 let rec removeDuplicates2 xs =
  match xs with
  |[]->[]
  |y::ys -> if y = (List.exists y ys) then
              (removeDuplicates2 ys)
            else
              y::(removeDuplicates2 ys)

printfn "%A" (removeDuplicates2 [3;1;3;2;1]) // result must be [3;1;2] 
  

Для чего мне нужна помощь, так это для создания инструкции if, которая проверяет, является ли элемент y членом списка ys

на данный момент я получаю сообщение об ошибке: «Ожидалось, что это выражение будет иметь тип «a -> bool», но здесь имеет тип»bool»»

может кто-нибудь сказать мне, что я делаю не так?

Комментарии:

1. Во-первых, вы сравниваете y с List.exists y ys тем, который должен возвращать true или false . Вы, вероятно, хотели написать if (List.exists y ys) then

2. Во-вторых, List.exists ожидает функцию. Если вы хотите проверить, содержит ли список элемент, используйте List.contains

3. Я думаю, что упражнение не подразумевает использование стандартных функций 🙂

Ответ №1:

List.exists ожидает, что первым аргументом будет функция, которая будет проверяться на элементе и возвращает логическое значение. Вы хотите проверить, есть ли элемент в списке, который вы могли бы написать:

 if List.exists ((=) y) ys then
  

или даже:

 if List.contains y ys then
  

следуя предложению Панайотиса.