2016-10-05 6 views
7

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

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] 

Что я нуждаюсь в помощи для делаем, если заявление, что проверяет, является ли элемент у является член списка ув

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

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

+3

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

+5

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

+1

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

ответ

8

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

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

или даже:

if List.contains y ys then 

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

+0

Это работает! Спасибо! – Nulle