#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`