Итак, сейчас я читаю "Land of Lisp", и Lisp оказывается совсем не таким, как другие языки программирования, которые я видел.
Так вот, в книге приводится код, который мы должны ввести в CLISP REPL:
(defparameter *small* 1)
(defparameter *big* 100)
(defun guess-my-number ()
(ash (+ *small* *big*) -1))
(defun smaller ()
(setf *big* (1- (guess-my-number)))
(guess-my-number))
(defun bigger ()
(setf *small* (1+ (guess-my-number)))
(guess-my-number))
Итак, основная цель - создать игру по угадыванию чисел, в которой пользователь/игрок выбирает число, а компьютер пытается его угадать. Он выполняет "двоичный поиск", чтобы найти число игрока, заставляя игрока сообщать, больше или меньше угаданного компьютером числа, чем число игрока.
Я немного запутался в функции ash
. Насколько я понимаю, она жизненно важна для двоичного поиска, но я не совсем понимаю, почему. В книге несколько объясняется, что она делает, но это немного запутывает.
Что делает функция ash
? Почему ей передаются параметры *small*
, добавленные к *big*
и -1
? Как это работает? Какую цель он преследует при бинарном поиске?