方案-eq?比较2个字符串?

发布于 2024-11-02 15:02:25 字数 364 浏览 1 评论 0原文

我的程序有问题。

我有一个比较两个字符串的条件:

(if (eq? (exp1) (exp2)))

当 exp1 给我一个字符串,而 exp2 给我一个字符串。可以肯定的是,当我更改“eq?”时到“=”,它给了我下一个问题:

=:需要类型;作为第二个 论点,给出:即;其他论点 是:即。

当我运行程序时,函数输入“if”函数中的第一个表达式,然后输入第二个表达式(意味着条件为假)。

我能做些什么?

谢谢。

I have a problem in my program.

I have a condition that compare between 2 string:

(if (eq? (exp1) (exp2)))

When exp1 give me a string, and exp2 give me a string. To be sure, when I change the "eq?" to "=", it give me the next problem:

=: expects type <number> as 2nd
argument, given: ie; other arguments
were: ie.

When I'm running the program, the function doesnt enter to the first expression in the "if" function, and enter to the second one (meaning the condition is false).

What can I do?

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

何止钟意 2024-11-09 15:02:25

根据等价谓词部分R6RS,您应该使用 equal?,而不是 eq?,它会测试它的两个参数是否完全相同的对象(而不是两个具有相同对象的对象) 价值)。

(eq? "a" "a")                           ; unspecified
(equal? "abc" "abc")                    ; #t

正如 knivil 在评论中指出的那样, 字符串 部分还提到了 string=?,专门用于字符串比较,这可能避免进行类型检查。

According to the Equivalence predicates section of R6RS, you should be using equal?, not eq?, which instead tests whether its two arguments are exactly the same object (not two objects with the same value).

(eq? "a" "a")                           ; unspecified
(equal? "abc" "abc")                    ; #t

As knivil notes in a comment, the Strings section also mentions string=?, specifically for string comparisons, which probably avoids doing a type check.

剪不断理还乱 2024-11-09 15:02:25

我为这个问题写了一个小辅助函数。

; test if eq?
(define ==
  (lambda (x y)
    (if (and (string? x) (string? y))
      (string=? x y)
      (if (or (string? x) (string? y))
            (= 1 0) ;return false
            (equal? x y)))))
(define a "aString")
(define l '("aString" "aOtherString"))
(== (car l) a) ; true
(== 1 1) ; true
(== 1 0) ; false
(== "a" 1) ; false diff. type
(== "a" "b") ; false
(== "a" "a") ; true
(== '("a" "b") '("a" "b"))

I wrote a little helper function for this problem.

; test if eq?
(define ==
  (lambda (x y)
    (if (and (string? x) (string? y))
      (string=? x y)
      (if (or (string? x) (string? y))
            (= 1 0) ;return false
            (equal? x y)))))
(define a "aString")
(define l '("aString" "aOtherString"))
(== (car l) a) ; true
(== 1 1) ; true
(== 1 0) ; false
(== "a" 1) ; false diff. type
(== "a" "b") ; false
(== "a" "a") ; true
(== '("a" "b") '("a" "b"))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文