трактовка чисел как булевских значений - это изъян, изначально заложенный в язык Си. Паскать от этого изъяна ушёл, строго разделив типы, но лучше всего булево-числовое сосуществование реализовано в Lua (+)
там все числа, включая 0 - это логическая истина логические выражения вычисляются "ленивым" образом и числа никогда автоматически не переводятся в булевское значение, выполнение операций and и or над числами не интерпретируется как побитовая операция (как это имеет место в Паскале), поэтому в Lua выражение 0 and 1 даст результат 1, а выражение 1 and 0 будет равно 0
Благодаря такой странности возможна компактная конструкция A = B and C or D аналогичная Сишной A = B?C:D
например, запись A = B < 0 and -B or B вычисляет модуль