Быстрое чтение чисел из потока - Lisp
Формулировка задачи:
Помогите написать функцию быстрого чтения целых чисел из потока. Уже есть чтение натуральных.
Просто не знаю от чего оттолкнуться
(defun get-integer (&optional (stream *standard-input*))
(declare (optimize (speed 3) (safety 0) (space 0) (debug 0)))
(let ((digit (read-char stream nil))
(number 0))
(declare (type fixnum number))
(if digit
(loop
(setf number (the fixnum (+ (the fixnum (* 10 number))
(the fixnum (- (char-code digit) (char-code #\0)))))
digit (read-char stream nil))
(unless (and digit (digit-char-p digit))
(return (values number digit))))
(values nil nil))))Решение задачи: «Быстрое чтение чисел из потока»
textual
Листинг программы
span class="sy0"> * (Create-fill-matrix 4) 1 2 3 4 1 2 3 4 1 2 3 4 #2A((NIL NIL NIL NIL) (1 2 3 4) (1 2 3 4) (1 2 3 4))
Объяснение кода листинга программы
В данном коде создается матрица размером 4x4, заполненная числами 1, 2, 3 и 4.
- Сначала вызывается функция
Create-fill-matrixс аргументом 4, которая создает матрицу размером 4x4. - Затем в матрицу записываются числа 1, 2, 3 и 4.
- Результат сохраняется в переменной с названием
NIL(номер 2A). - После этого числа 1, 2, 3 и 4 записываются в каждую строку матрицы.
- Результат сохраняется в переменной с названием
NIL(номер 2A). - Затем числа 1, 2, 3 и 4 записываются в каждый столбец матрицы.
- Результат сохраняется в переменной с названием
NIL(номер 2A). - В конце кода выводится содержимое переменной
NIL(номер 2A).