Я хочу создать функцию, которая обходит список, обрабатывает заголовок, останавливается после K рекурсий, а также создает идентичный список, используя элемент head в каждой рекурсии. Код:
fun trav (0, _, list) = list
| trav(K, x::xs, list) =
trav(K - 1, xs, list@[x])
так что если я позвоню trav(4,[1,2,3,4,5,6],[])
Я ожидаю
list =[1] ,K=3
=[1,2] ,K=2
=[1,2,3] ,K=1
=[1,2,3,4] ,K=0
Однако для очень больших входных данных это-> list@[x]
, кажется, приводит к сбою моей программы (я не уверен, почему), и если я вместо этого использую (x :: list)
, предоставляя другой (но одинакового размера) список в результате на каждом шаге все работает нормально. Почему это происходит? Как я могу реализовать list@[x]
с помощью оператора cons?