Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Your task is to implement a simple chatbot in Scheme (Dr Racket ). Here's a sample chat that your program will carry out: > (chat-with

Your task is to implement a simple chatbot in Scheme (Dr Racket).

Here's a sample chat that your program will carry out:

> (chat-with 'Name)

hi name

talk to me >>>how are you? why do you ask?

talk to me >>>i am bored i am bored too

talk to me >>>can you sing? yes i can

talk to me >>>i like to sing too good to know

talk to me >>>do you play the guitar? no rula i do not play the guitar

talk to me >>>are you intelligent? maybe

talk to me >>>what is the meaning of life? what do you think?

talk to me >>>i think it is all about family and friends tell me more about your friends name

talk to me >>>they are great that's nice

talk to me >>>will you help me with my work? no rula i will not help you with your work

talk to me >>>tell me a joke you tell me a joke

talk to me >>>why are you doing this? why not?

talk to me >>>do you understand me? yes i do

talk to me >>>i need to go get my umbrella why do you need to go get your umbrella?

talk to me >>>because it is raining is that the real reason?

talk to me >>>you drive me crazy can you elaborate on that?

talk to me >>>bye bye rula have a great day!

Your program will generate a response based on the following rules:

if the input is of the form: your program will generate a response (randomly chosen)
1 (do|can|will|would) you ________________?

no i (do|can|will|would) not __change person___

yes i (do|can|will|would)

2 _____(special topics)_______ tell me more about your (special topics)...
3 why __________? why not?
4 how __________?

why do you ask?

how would an answer to that help you?

5 what __________?

what do you think?

why do you ask?

6 _____________?

i don't know

i have no idea

i have no clue

maybe

7 ______because_______ is that the real reason?
8 i (need|think|have|want) ________ why do you (need|think|have|want) __change person_____?
9 i __________ (last word is not too) i __________ too
10 verb ________________ you verb ______________
11 everything else good to know that' s nice can you elaborate on that?

The user name will be identified when the main function is called: (chat-with 'user-name)

The special topics in rule 2 will include the following: family, friend(s), mom, dad, brother, sister, girlfriend, boyfriend, children, son, daughter, child, wife, husband, home, dog, cat, pet. If more than one special topic is found in the input, your program will pick one randomly and ask the user about it. For example, the response to:

talk to me >>>i think it is all about family and friends

can be either: tell me more about your friends name

or: tell me more about your family name

In rule 1 and rule 8, when the chatbot repeats part of the user's input, the pronouns must be changed as follows:

I becomes you

am becomes are

my becomes your

your becomes my

me becomes you

you becomes me

talk to me >>>will you help me with my work? no rula i will not help you with your work

talk to me >>>i want to understand your algorithm why do you want to understand my algorithm?

talk to me >>>i think i am done why do you think you are done?

talk to me >>>i have to understand you why do you have to understand me?

For rule 10, you will use a short list of verbs that includes: tell, give, say.

STARTER CODE:

;;; chat.rkt

;;; We'll use the random function implemented in Racket ;;; (random k) returns a random integer in the range 0 to k-1 (#%require (only racket/base random))

;;; some input and output helper functions

;;; prompt: prompt the user for input ;;; return the input as a list of symbols (define (prompt) (newline) (display "talk to me >>>") (read-line))

;;; read-line: read the user input till the eof character ;;; return the input as a list of symbols (define (read-line) (let ((next (read))) (if (eof-object? next) '() (cons next (read-line)))))

;;; output: take a list such as '(how are you?) and display it (define (output lst) (newline) (display (to-string lst)) (newline))

;;; to-string: convert a list such as '(how are you?) ;;; to the string "how are you?" (define (to-string lst) (cond ((null? lst) "") ((eq? (length lst) 1) (symbol->string (car lst))) (else (string-append (symbol->string (car lst)) " " (to-string (cdr lst))))))

;;; main function ;;; usage: (chat-with 'your-name)

(define (chat-with name) (output (list 'hi name)) (chat-loop name))

;;; chat loop (define (chat-loop name) (let ((input (prompt))) ; get the user input (if (eqv? (car input) 'bye) (begin (output (list 'bye name)) (output (list 'have 'a 'great 'day!))) (begin (reply input name) (chat-loop name)))))

;;; your task is to fill in the code for the reply function ;;; to implement rules 1 through 11 with the required priority ;;; each non-trivial rule must be implemented in a separate function ;;; define any helper functions you need below (define (reply input name) (output (pick-random generic-response))) ; rule 11 has been implemented for you

;;; pick one random element from the list choices (define (pick-random choices) (list-ref choices (random (length choices))))

;;; generic responses for rule 11 (define generic-response '((that\'s nice) (good to know) (can you elaborate on that?)))

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Database Processing

Authors: David Kroenke

11th Edition

0132302675, 9780132302678

More Books

Students also viewed these Databases questions

Question

How are members held accountable for serving in the assigned roles?

Answered: 1 week ago