Ich habe diese zwei grundlegende Funktionen:Mit Common Lisp Würfel neu Rolle ausgewählt, und nicht ausgewählte halten Benutzereingaben
(defun dice()
(+ 1 (random 6)))
(defun five-dice()
(list (dice) (dice) (dice) (dice) (dice)))
Alles, was sie tun, ist eine Liste von fünf geworfenen Würfel erstellen. Ich möchte eine bestimmte Anzahl von Würfeln auswählen, um sie erneut zu würfeln. Das heißt, ich möchte entweder 2, 3 oder alle 5 auswählen, um erneut zu würfeln und die Würfel, die erneut gewürfelt werden, zu ersetzen, während ich diejenigen behalte, die ich nicht würfle. Ich möchte dies mit Benutzereingaben tun.
Meine Annahme ist, dass der beste Weg, dies zu tun ist, ein Symbol zu verwenden, aber ich habe für einen Tag versucht und kann nicht herausfinden, wie genau dies zu tun ist. Deshalb habe ich beschlossen, Hilfe zu suchen.
Bearbeiten: Vielen Dank für Ihre Hilfe, ich schätze es wirklich. Ich habe Probleme, meinen Kopf darüber zu wickeln, wie Lisp Benutzereingaben akzeptiert und wie diese in Variablen gespeichert werden.
Also, ich erstelle eine globale Variable, und verwenden Sie diese als erste Rolle des Benutzers, aber sobald ich versuche, die Eingabe des Benutzers zu verwenden, um bestimmte Würfel neu zu rollen, das ist der Teil, den ich habe Schwierigkeiten zu verstehen. Ich habe ein paar Beispiele sieht, und ich habe versucht, es neu zu erstellen, aber es funktioniert nicht Training für mich:
(defun testfunction() (terpri) (princ "would you like to roll? ") (read-line) (if (member (read-line) '("y" "yes" "") :test #'string=) (let ((roll (five-dice))) )))
Das ist, was ich versuche zu arbeiten, um zu bekommen, so, nachdem der Benutzer Ja oder Ja eingegeben hat, gibt er ihnen 5 Würfel und gibt ihnen 3 Chancen, eine beliebige Anzahl von Würfeln erneut zu würfeln. Also, das ist, was ich gerade versuche zu arbeiten.
Edit2:
(defun roll-again(lst) (if (null lst)nil (setf (nth (car lst) list-dices)(dice)) (yup (cdr lst)) ))
Warum nicht funktioniert diese Funktion? Was ich jetzt versuche, ist, diese Funktion zu verwenden, um die Würfel, die der Benutzer wählt, erneut zu würfeln. Sobald ich vom Benutzer Eingaben erhalte, lege ich diese Eingabe in eine Liste und benutze diese Funktion, um diese Würfel erneut zu würfeln. Aber ich kann diese Funktion aus irgendeinem Grund nicht ausführen.
* Am besten verwenden Sie ein Symbol *. Was meinen Sie? Können Sie eine Beispielinteraktion mit dem Benutzer zeigen, die die verschiedenen Anwendungsfälle zeigt? – coredump