Как сравнить два списка в daml

#daml #digital-assets

#daml #цифровые активы

Вопрос:

 compare1:[Int] -> Book
Compare1[x]  =([x] == [x])

Test1 = scenario do

Debug(compare1 [11,12])
  

Что не так с приведенным выше кодом, почему daml:44-1-30:Non-exhaustive patterns in function compare1 появляется ошибка?

Комментарии:

1. Обратите внимание, что, поскольку оператор равенства == работает Int , он также автоматически работает [Int] . Итак, не отвечая прямо на ваш вопрос, самый простой способ реализовать compare1 — это просто compare1 = (==) .

Ответ №1:

Давайте посмотрим на ключевую строку здесь:

 compare1 [x] = [x] == [x]
  

В левой части знака равенства у вас есть совпадение с шаблоном [x] . Это соответствует только одному списку элементов и свяжет этот единственный элемент с именем x . Итак, какая ошибка сообщает вам, что все остальные случаи не обрабатываются (пустые списки и списки с более чем одним элементом).

Чтобы исправить это, у вас есть два варианта: либо вы меняете соответствие шаблону на просто переменную xs (или любое другое имя). Это будет соответствовать любому списку независимо от количества элементов и привязывать список к имени xs .

 compare1 xs = …
  

В качестве альтернативы, вы можете использовать 2 сопоставления шаблонов, чтобы охватить случай, когда список пуст, а список содержит 1 или более элементов:

 compare1 [] = … -- do something for empty lists
compare1 (x :: xs) = … -- do something with the head of the list bound to `x` and the tail bound to `xs`