方案 - 方程式?比较两个字符串?

时间:2011-04-20 12:57:00

标签: scheme

我的程序中存在问题。

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

  

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

当exp1给我一个字符串时,exp2给我一个字符串。当然,当我改变“eq?”时到“=”,它给了我下一个问题:

  

=:期望类型< number>作为第2   论证,给出:即;其他论点   是:即。

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

我该怎么办?

谢谢。

2 个答案:

答案 0 :(得分:5)

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

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

作为评论中的文字说明,Strings部分还提到了string=?,特别是字符串比较,这可能会避免进行类型检查。

答案 1 :(得分:0)

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

; 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"))