Функция слияния в Lua - PullRequest
       14

Функция слияния в Lua

2 голосов
/ 20 июля 2010

Эй, я пытаюсь реализовать функцию слияния из сортировки слиянием в Lua. Я хорошо знаю алгоритм, но я новичок в Lua. Я продолжаю получать «неверный аргумент # 1 для« вставки »(таблица ожидалась, получена ноль)» Я считаю, что ошибка указывает на мой рекурсивный вызов. Я не могу понять это, и у меня есть чувство, что это что-то довольно тривиальное. Мне просто нужен гуру Луа, чтобы дать мне руководство. Благодарю. Вот моя функция:

function merge(l1, l2)
if # l1 == 0 then
    return l2
elseif # l2 == 0    then
    return l1
else
    if l1[1] <= l2[1] then
        tmp = l1[1]
        table.remove(l1,1)
        return table.insert(merge(l1,l2),tmp)

    else 
        tmp = l2[1]
        table.remove(l2,1)
        return table.insert(merge(l1,l2),tmp)
    end
end
end

1 Ответ

6 голосов
/ 20 июля 2010

Я не совсем уверен, чего вы хотите достичь с помощью функции merge, но очевидная проблема состоит в том, что table.insert не возвращает таблицу, она возвращает nil.

Сохранениерезультат слияния в таблице t с использованием table.insert на t и, наконец, возвратом t, похоже, не сломается, как раньше.сделал.table.remove возвращает удаленный элемент, поэтому вам не нужно сначала обращаться к элементу, а затем удалять его.Я рекомендую использовать ключевое слово local для переменных, потому что в Lua все переменные являются глобальными по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...