У меня возникли проблемы с пониманием этого простого фрагмента коды:соответствия шаблона и бесконечные списки
-- This works: foldr go1 [] [1..]
-- This doesn't: foldr go2 [] [1..]
go1 a b = a : b
go2 a [] = a : []
go2 a b = a : b
Складным с go1
сразу начинают возвращение значения, но go2
, кажется, ожидая конец списка.
Очевидно, что совпадение шаблонов приводит к тому, что что-то обрабатывается по-разному. Может кто-нибудь объяснить, что именно здесь происходит?
Спасибо за отличные ответы всем. Если бы я мог выбрать несколько решений, я бы это сделал, потому что все они помогли мне понять концепцию. – Balthamos
в дополнение к «выбору» ответа вы также можете поддержать тех, кого считаете «полезными» (это говорит так, когда вы навешиваете над стрелкой вверх). :) –