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

IOT Hacking Techniques

Blog banner

Odoo

Blog banner

Culture Of Ladakh

Blog banner

Objectives and functions of Operating System...

Blog banner

Gis in agriculture and farming

Blog banner

Uniprocessor scheduling

Blog banner

Cyber Security Control

Blog banner

Multiprocessor and Multicore Organization

Blog banner

Types of Viruses

Blog banner

Deadlock

Blog banner

Stay Close To Adventure In Arcadia, Florida At Oak Tree Hotel

Blog banner

The New Classic: Indo Western Patola Outfits for Today’s Woman

Blog banner

Multicore and multithreading 171

Blog banner

Anomaly Detection in Behavioral Data Using Machine Learning

Blog banner

Digital Marketing - The new way to reach end consumer

Blog banner

10 Interesting Facts about Death Note

Blog banner

LISP - Library Management System

Blog banner

Bitcoin sent using radio waves! No internet!

Blog banner

Nature’s Brush on Silk: The Secret Behind Patola Colours

Blog banner

Virtual Memory

Blog banner

A small world of Sockets

Blog banner

Uniprocessor scheduling

Blog banner

Python as a tool for data analysis

Blog banner

Virtual Machine's

Blog banner

Modern Operating System - Khush Bagaria

Blog banner

Business Engineering

Blog banner

Are Social Media Paid Campaigns Worth It?

Blog banner

Guidelines for a Low sodium Diet.

Blog banner

Data Warehouse Bus Matrix

Blog banner

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

Blog banner

Big Data Architecture

Blog banner

On-Page SEO

Blog banner

Interrupts in operating system.

Blog banner

ONLINE NEWSROOMS

Blog banner

Sagar Parikrama

Blog banner

Deadlock

Blog banner

Supervised and Unsupervised Learning

Blog banner

NIKE

Blog banner

The Joy of Giving: How Festivals Teach Children Empathy and Gratitude

Blog banner

NodeJs

Blog banner

Celebrate Diwali the Delicious Way with Meal Maharaj Catering

Blog banner

Multiprocessor and scheduling

Blog banner