Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 735699
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 14, 20262026-05-14T07:31:13+00:00 2026-05-14T07:31:13+00:00

Examples of what you can do. (defmethod some-fn ((num real)) (print an integer)) (defmethod

  • 0

Examples of what you can do.

(defmethod some-fn ((num real))
   (print "an integer"))
(defmethod some-fn ((num real))
  (print "a real"))
(defmethod some-fn ((num (eql 0)))
  (print "zero"))

(some-fn 19323923198319)
"an integer"
(some-fn 19323923198319.3)
"a real"
(some-fn 0)
"zero" 

It also works with a general ‘string type.

(defmethod some-fn ((num string))
  (print "a string"))
(some-fn "asrt")
"a string"

Not with a specific string, however

(defmethod some-fn ((num (eql "A")))
  (print "a specifict string")))     
(some-fn "A")
  => "A string"

I imagine it doesn’t work because eql does not work on strings in the way that would be necessary for it to work.

(eql "a" "a") => nil

Is there a way to do it?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-14T07:31:13+00:00Added an answer on May 14, 2026 at 7:31 am

    Short answer: Yes, it has.

    Long answer:

    You wrote:

    (defmethod some-fn ((num (eql "A")) (print "a specifict string")))
    => doesn't compile
    

    That’s because you got the syntax wrong. It should be:

    (defmethod some-fn ((num (eql "A"))) (print "a specific string"))
    => does compile
    

    Which is usually formatted as:

    (defmethod some-fn ((num (eql "A")))
      (print "a specifict string"))
    

    If you format it this way and use the built-in indentation tool of your favorite editor, you would see that the indentation looks wrong for your code:

    (defmethod some-fn ((num (eql "A"))
                        (print "a specifict string")))
    

    It also may help to try to understand the error message shown by the compiler.

    Back to the topic:

    You can use strings as any other Lisp object for EQL dispatch in CLOS.

    It is just that there are many possible strings that look like “A” and EQL compares for identity (with an exception for numbers and characters). EQL does not compare strings by their characters.

    Typically (EQL “A” “A”) returns NIL. (Side note: Actually in code compiled by the compiler this expression theoretically can be T. Because the compiler is allowed to reuse data objects to save space in the compiled code. Here we have literal strings, data objects.)

    If you enter on the command line

    (some-fn "A")
    

    it won’t trigger the EQL dispatch.

    But this works as expected:

    (defparameter *a-string* "A")
    
    (defmethod some-fn ((num (eql *a-string*)))
      (print "a specific string")))
    

    and then

    (some-fn *a-string*)
    

    You need to make sure that the variable has a value. The variable is evaluated, when the macro expansion of the DEFMETHOD form is evaluated. The value then is the object that is used for EQL dispatch.

    As Dirk has mentioned in his answer, one can use symbols. The purpose of symbols is that (EQL ‘|A| ‘|A|) is usually T. Symbols are made EQ during the reading process.

    Summary:

    EQL dispatch over strings works in CLOS. For practical use, you need to call the function with the same, in terms of EQL, string.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 430k
  • Answers 430k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer As the exception points, your string is ASCII-8BIT encoded. You… May 15, 2026 at 2:04 pm
  • Editorial Team
    Editorial Team added an answer Best way to get the effect of altering a file… May 15, 2026 at 2:04 pm
  • Editorial Team
    Editorial Team added an answer What about the centerCoordinate property? i.e. CLLocationCoordinate2D centre = [locationMap… May 15, 2026 at 2:04 pm

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.