В Haskell некоторые списки циклические:
ones = 1 : ones
Других нет:
nums = [1..]
И тогда есть такие вещи:
more_ones = f 1 where f x = x : f x
Это означает то же значение, что и ones
, и, конечно, это значение является повторяющейся последовательностью. Но сомнительно ли оно представлено в памяти как циклическая структура данных. (Реализация может сделать это, но этот ответ объясняет, что "маловероятно, что это произойдет на практике" .
Предположим, что мы берем реализацию Haskell и взламываем в нее встроенную функцию isCycle :: [a] -> Bool
, которая анализирует структуру представления аргумента в памяти. Он возвращает True
, если список физически цикличен и False
, если аргумент имеет конечную длину. В противном случае он не завершится. (Я предполагаю, что "взломал его", потому что невозможно записать эту функцию в Haskell.)
Будет ли существование этой функции нарушать любые интересные свойства языка?