Я пишу программу разворота списка для haskell.Ошибка возврата списка Haskell
У меня есть идея для разворота списка и это приводит к следующему коду:
myreverse list1
| list1 == [] = list1
| otherwise = (myreverse(tail list1)):(head list1)
К сожалению, приведенные выше результаты кода в следующей ошибки:
Occurs check: cannot construct the infinite type: a = [[a]]
Expected type: [[a]]
Inferred type: a
In the second argument of '(:)', namely '(head list1)'
In the expression: (myreverse(tail list1)):(head list1)
PS: Я получить такую же ошибку, когда я запустил ее в фрагменте, который я написал, назвал mylast, закодированным ниже:
mylast list
| list == [] = []
| otherwise = mylast_helper(head list1)(tail list1)
mylast_helper item list2
| list2 == [] = item
| otherwise = mylast_helper(head list2)(tail list2)
Ошибка в противном случае рекурсивного помощника.
EDIT: Спасибо за все входные данные, я, наверное, забыл упомянуть, что ограничения вопроса запрещают использование оператора ++. Я буду держать это в виду для будущих вопросов, которые я создаю.
Приветствия, -Zigu
Конкатентные работы по двум спискам и список заголовков1 - это единственный элемент, однако ... – yatima2975
Также это будет работать в O (n^2) раз, если оно скомпилировано –
@yatima, которое было опечатка, исправлена, спасибо, что указали это. @pelotom, глядя на вопрос и пытаясь оценить способность аскетизма, я бы сказал, что, хотя это может быть неэффективно, это подходит ... – Jon