Donc, je lis maintenant Land of Lisp, et Lisp s'avère être très différent des autres langages de programmation que j'ai vus.Utiliser 'ash' dans LISP pour effectuer une recherche binaire?
Quoi qu'il en soit, le livre fournit un code que nous sommes censés entrer dans le 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))
Maintenant, l'objectif de base est de créer un jeu de devinettes numéro dans lequel l'utilisateur/joueur choisit un certain nombre , puis l'ordinateur essaie de deviner le numéro. Il effectue une "recherche binaire", pour trouver le numéro du joueur, en demandant au joueur de signaler si le nombre deviné par l'ordinateur est supérieur ou inférieur au nombre du joueur.
Je suis un peu confus au sujet de la fonction ash
. Je crois comprendre que c'est essentiel à la recherche binaire, mais je ne sais pas trop pourquoi. Le livre explique un peu ce qu'il fait, mais c'est un peu confus.
Que fait la fonction ash
? Pourquoi est-il passé les paramètres de *small*
ajoutés à *big*
et -1
? Comment ça marche? A quoi sert la recherche binaire?
Probablement un décalage arithmétique. – leppie
Voir l'entrée HyperSpec sur [** ASH **] (http://www.lispworks.com/documentation/HyperSpec/Body/f_ash.htm): "ash effectue l'opération de décalage arithmétique sur la représentation binaire d'entier, qui est traité comme s'il était binaire. " –