Functional programming 方案二列出交叉口

Functional programming 方案二列出交叉口,functional-programming,scheme,Functional Programming,Scheme,我已经写了这个代码 (define (in-list? val ls) (if (null? ls) #f (if (= (car ls) val) #t (in-list? val (cdr ls)) ) ) ) (define (intersect ls1 ls2) (if (null? ls1) '() (if (in-list? (car ls1) ls2) (cons (car ls1)

我已经写了这个代码

(define (in-list? val ls)
  (if (null? ls) #f 
    (if 
        (= (car ls) val) #t
        (in-list? val (cdr ls))
    )
  )
)
(define (intersect ls1 ls2)
  (if (null? ls1)
    '()
    (if (in-list? (car ls1) ls2) 
        (cons (car ls1) (intersect (cdr ls1) ls2))
        (intersect (cdr ls1) ls2)
    )
  )
)

如果我问(intersect'(1233)'(147)),它会正常工作,但当我尝试(intersect'(abc)'(abd)),它会返回空列表。

,这是因为
=
只对数值有效。试着用
eq?
代替。谢谢,然后我用
equal?
解决了这个问题<代码>等式?的工作原理如下well@Iraklius
eq?
对于太大而无法存储为指针的值或根本无法存储在不将值存储为指针的方案中的值不起作用。例如,
(eq?“test”“test”)
未定义,
\t
\f
都是可接受的结果。当你不知道你能得到什么类型并且想要比较值时,总是使用
equal?
。我不知道。谢谢您
(intersect'(1231234)'(1234))
的输出应该是什么?