Это уже проблема вызывающего кода. Функция AddElement() принимает Integer, и всё.
Так, пардоньте, и то, что last не является указателем на последний элемент списка, проблема вызывающего кода, а не процедуры.
Процедура add(как и AddElement) принимает указатель на последний элемент и всё. (:
Как вы уже поняли, если писать в первом стиле - типа библиотеку с возможностью повторного использования, то надо тщательнее подходить к разработке как интерфейса, так и имплементации. А скорее всего, такая библиотека уже есть, и лучше использовать уже готовое.
Если же код пишется на один раз, то проще, да и короче, писать во втором стиле, зная какие есть пре- и пост- условия на месте, и пользуясь этим.
А вот это особо интересно.
Понятно, что задача реализации библиотеки - это отдельная задача, со своими тонкостями, тут и разработка гибкого интерфейса и прочая, прочая, прочая.
Но Вы считаете, что в контексте небольшой конечной задачи мой подход (или, допустим, подход
EtCetera) не слишком целесообразен?
А как же логическое структурирование кода? Упрощение отладки? Повышение гибкости программы? Удобство дальнейшей модификации?