Я новичок в OCaml, и пытался создать функцию, чтобы увидеть, был ли список x подмножеством y, и я не уверен, в чем я ошибаюсь. Я читал кучу похожих проблем, и все они приводят к конфликту типов в качестве причины, но я не уверен, где у меня есть какие-либо конфликты.
# let header x = List.hd x;;
val header : 'a list -> 'a = <fun>
# let matcher x y = List.mem x y;;
val matcher : 'a -> 'a list -> bool = <fun>
# let tailer x = List.tl x;;
val header : 'a list -> 'a = <fun>
# let rec sub x y =
if ((List.length x) == 0) then true
else if (matcher (header x) y) then sub((tailer x) y)
else false;;
Error: This expression has type 'a list
This is not a function; it cannot be applied.
В rec sub xy я могулибо верните 'true' для пустого списка x, передайте sub в List.tl of x, то есть список без заголовка (насколько я понимаю), или просто верните false, если я не смог найти текущий заголовокх в у. Рекурсия должна в конечном итоге привести либо к истине, либо к ложности, поэтому я не вижу, где может возникнуть конфликт типов.