#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
следуя предложению Панайотиса.