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

“CONSISTENCY” in Social Media Marketing

Blog banner

What is Internet

Blog banner

security requirements for safe e-payment

Blog banner

THE ACTORS LIFE

Blog banner

Compromising Mobile Platforms

Blog banner

Malware Detection Techniques for Mobile Devices

Blog banner

Trends that began during the pandemic

Blog banner

Decrypting Cryptocurrency: Tracing Transactions in Cyber Investigations

Blog banner

Virtual Memory

Blog banner

Traditional Unix System

Blog banner

Memory

Blog banner

5 Powerful Mindset Shifts To Make 2026 Your Breakthrough Year

Blog banner

Incident management in ITSM

Blog banner

PERSONALITY DEVELOPMENT

Blog banner

Dekkers Algorithm : Ensuring Safe Process Synchronization

Blog banner

About myself

Blog banner

File system

Blog banner

MPL and how its effects?

Blog banner

Every body is beautiful

Blog banner

Pilgrimage at LOC: A privilege and a paradox

Blog banner

Why Should You Schedule Tweets on Twitter?

Blog banner

FILE SHARING

Blog banner

Understanding the 4 Types of Learning Methods in Early Childhood

Blog banner

The Future of Cybersecurity: Trends, Challenges, and Strategies

Blog banner

Full Disk Encryption

Blog banner

Microsoft powerpoint presentation

Blog banner

Social Media Marketing Trends 2022

Blog banner

Cross site scripting Attack

Blog banner

Embaded operating system

Blog banner

Cyber Security Standards

Blog banner

Why Mumbai Professionals Are Switching Back to Home-Style Tiffin Meals

Blog banner

IT Service as as Value Creation

Blog banner

Hacking

Blog banner

Answer

Blog banner

Rain bow

Blog banner

Uniprocessor Scheduling

Blog banner

Cyber Security in Data Breaching

Blog banner

The Features of Blockchain

Blog banner

Cache Memory

Blog banner

SECURITY VULNERABILITIES COUNTERMEASURES IN A SMART SHIP SYSTEM

Blog banner

Functions of operating system

Blog banner

Cloud Computing: Threats and Vulnerabilities

Blog banner