Я пытаюсь написать функцию contains
в SML/NJ:
fun contains(el: 'a, items: 'a list) =
if null items
then false
else ((hd items) = el) orelse contains(el, tl items)
Я знаю, что, вероятно, мог бы достичь того же конечного результата, используя нативные функции list
, но это для MOOC, который призывает не использовать какие-либо функции SML/NJ, кроме основ, которые он рассмотрел до сих пор. Ошибка, которую я получаю:
solution.sml:10.9-10.24 Error: operator and operand don't agree [UBOUND match]
operator domain: ''Z * ''Z
operand: 'a * 'a
in expression:
hd items = el
Я не уверен на 100%, почему я не могу абстрагироваться от 'a
так же, как и от 'a list
, я хочу, чтобы 'a
представлял один и тот же абстрактный тип в обоих экземплярах. Я делаю это совершенно неправильно?