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

Security Issues and Countermeasures

Blog banner

BharatPe

Blog banner

How Sleep Impacts Learning and Behaviour for Toddlers?

Blog banner

Virtual Memory

Blog banner

Session Hijacking

Blog banner

The application udemy

Blog banner

Heart Fulness Meditation

Blog banner

Stories Woven in Silk: The Meaning Behind Patola Motifs

Blog banner

How Harshad Valia International School is nurturing India’s Young Minds?

Blog banner

Evolution of Operating system

Blog banner

Measuring IT Risk

Blog banner

Vulnerabilities in OnePlus Devices

Blog banner

Developments in Modern Operating Systems

Blog banner

Understanding - Proof of Work!

Blog banner

Memory Management

Blog banner

The Secure Software Development Life Cycle (SDLC)

Blog banner

Exploring Virtual Machines and Computer Forensic Validation Tools

Blog banner

Utilizing Data-Hiding and Retrieval Techniques in Cyber Forensics

Blog banner

Introduction to Virtual Memory - 080

Blog banner

Operating System

Blog banner

RAID

Blog banner

Memory Management

Blog banner

Linux VServer Architecture

Blog banner

VIRTUAL MACHINE

Blog banner

How GIS in Agriculture Eliminates Guesswork

Blog banner

Brain wash of social media

Blog banner

Operating System Objectives and Functions

Blog banner

Zomato (Income Sources)

Blog banner

The seven-step improvement process

Blog banner

To-Do List In LISP

Blog banner

The Essential Guide to Dynamic Arrays vs. Linked Lists: Which to Use and When ?

Blog banner

Impacts of Data Breach On Companies Challenges and Prevention

Blog banner

File Management In OS

Blog banner

Social Network Analysis: Ek Naya Nazariya Data Science Mein

Blog banner

NIKE

Blog banner

Importance Of Education.

Blog banner

Efficiency of SQL Injection Method in Preventing E-Mail Hacking

Blog banner

Microsoft Windows Overview

Blog banner

Multiprocessor

Blog banner

IP ADDRESS

Blog banner

Risk mitigation and management

Blog banner

Privacy in Social Media and Online Services

Blog banner