Find if Duplicates Exist SML NJ

functional-programming, sml, smlnj

Solution

As @Marcin said in the comment, an easy and efficient way is to use set for checking duplication. SML/NJ have many set structures available in Utility Library.

Regarding your function, you cannot compare `x` and `myFunc xs` since they may not have the same type. And empty list is a list without duplication (`myFunc []` should return `false`).

This works:

fun duplicated [] = false
  | duplicated (x::xs) = (List.exists (fn y => x = y) xs) orelse (duplicated xs)

However, the worst-case time complexity is O(n2) (`n` is the length of the list) which is quite inefficient.

Problem

I want to write a single function that searches a list and finds if there are any duplicates values in this list. The function should return a boolean. Here is where I'm at, but this is not working... ``` fun myFunc [] = true myFunc(x::xs) = if(x=myFunc(xs)) then false else myFunc(xs); [1,2,2,3,4,5,6] should return true [1,2,3,4,5,6,7] should return false [1,2,3,4,5,6,1] should return true ``` thanks!

Original source