wisemonkeys logo
FeedNotificationProfileManage Forms
FeedNotificationSearchSign in
wisemonkeys logo

Blogs

Rock, Paper, Scissors Game in Common Lisp

profile
Om Rawal
Jul 16, 2025
0 Likes
0 Discussions
0 Reads


1. Code Analysis

Let’s walk through how the code works, step by step:

a. Setup

(defun rock-paper-scissors ()
(let ((choices '("rock" "paper" "scissors"))
(random-state (make-random-state t)))
  1. I defined a function called rock-paper-scissors.
  2. Inside, I created a list of choices: "rock", "paper", and "scissors".
  3. I also made a random state to generate random numbers.

b. Welcome Message

(format t "~%--- Welcome to the Rock, Paper, Scissors Game! ---~%")
(format t "Instructions: Type 'rock', 'paper', or 'scissors' to play.~%")
(format t "You can also type 'quit' anytime to exit the game.~%~%")
  1. Prints a welcome message and tells the player how to play.

c. The Game Loop

(loop
(format t "Your move: ")
(let ((player-move (string-downcase (read-line))))
...
  1. Starts an infinite loop for continuous gameplay.
  2. Asks the player to type their move.
  3. Converts the input to lowercase so it works even if the player types “Rock” or “ROCK”.

d. Handling “quit”

(if (string= player-move "quit")
(progn
(format t "Thanks for playing! Goodbye.~%")
(return))
  1. If the user types quit, the program says goodbye and exits the loop.

e. Validating Input

(if (not (member player-move choices :test #'string=))
(format t "Oops! Please enter only 'rock', 'paper', or 'scissors'.~%")
  1. Checks if the user typed a valid move.
  2. If not, it prints a warning and loops back to ask again.

f. Computer’s Move

(let* ((computer-move (nth (random 3 random-state) choices)))
(format t "Computer chose: ~A~%" computer-move)
  1. Picks a random move from the list of choices.
  2. Prints out what the computer chose.

g. Determining the Winner

(cond
((string= player-move computer-move)
(format t "It's a tie! We both chose ~A.~%" player-move))

((or (and (string= player-move "rock") (string= computer-move "scissors"))
(and (string= player-move "scissors") (string= computer-move "paper"))
(and (string= player-move "paper") (string= computer-move "rock")))
(format t "You win! ~A beats ~A.~%" player-move computer-move))

(t
(format t "You lose! ~A beats ~A.~%" computer-move player-move))))
  1. Checks for a tie first.
  2. Then checks if the player wins.
  3. Otherwise, prints that the player lost.

2. Output

Here’s what a sample run looks like:



Comments ()


Sign in

Read Next

Risk mitigation and management

Blog banner

SPAM

Blog banner

Operating system evolution

Blog banner

How return on investment is defined in IT services

Blog banner

"The Benefits of Using GIS in Agriculture"

Blog banner

Importance of education

Blog banner

DATA SCIENCE IN BUSINESS AND MARKETING

Blog banner

FIREWALL

Blog banner

Deadlock and Starvation

Blog banner

Danger assessment in GIS

Blog banner

(Input/Output) in os

Blog banner

FAMILY WHERE LIFE BEGINS....

Blog banner

URL vs Domain

Blog banner

LIMITED EDITION

Blog banner

SmartData Collective: Data Science aur Analytics ki Duniya

Blog banner

Beatbox

Blog banner

How to Avoid being a Victim of Cybercrime

Blog banner

JUSTICE FOR EVERY “BEZUBAAN ANIMAL”

Blog banner

Threads in OS

Blog banner

Service Operations Principles

Blog banner

What is Data, Information and Knowledge?

Blog banner

I/O Buffering

Blog banner

Steganography and Steganalysis

Blog banner

Article on team management software

Blog banner

10 Unknown facts about India's Independence

Blog banner

Record Blocking

Blog banner

Deadlocks

Blog banner

How To Invest in Indian Stock Market For Beginners. ~ Tutorial 2 (NSDL And CSDL) Continued...

Blog banner

Memory Management - operating system

Blog banner

Python as a tool for data analysis

Blog banner

INTERRUPTS

Blog banner

memory cache

Blog banner

DATA BREACH CAUSES CHALLENGES PREVENTION AND FUTURE DIRECTIONS

Blog banner

Race Condition in Operating Theatre

Blog banner

Memory heirachy (Operating system)

Blog banner

File system

Blog banner

Race condition

Blog banner

Cache Memory

Blog banner

SMARTSHEET

Blog banner

Starvation

Blog banner

Should you be using a mouthwash? Know from the experts

Blog banner

MailChimp

Blog banner