Scheme 删除/比较字符串值与列表-方案

Scheme 删除/比较字符串值与列表-方案,scheme,racket,Scheme,Racket,我试图从由这些成员组成的列表中删除字符串中存在的成员 例如: 字符串:“ABC” 列表:('A'B'C'D) 要执行的操作:从列表中删除字符串的第一个元素 要从字符串中删除元素,请执行以下操作: 我正在使用以下方法将其转换为列表: (car (string->list"ABC") 这给了我字符列表和第一个元素:\A 但我不知道如何从列表中删除它,因为两个值都不比较:字符值和列表值 尝试了这种奇怪的方法,但没有成功: ((eq? (make-string 1 (car (string-&

我试图从由这些成员组成的列表中删除字符串中存在的成员

例如:

字符串:
“ABC”

列表:
('A'B'C'D)

要执行的操作:从列表中删除字符串的第一个元素

要从字符串中删除元素,请执行以下操作:

我正在使用以下方法将其转换为列表:

(car (string->list"ABC") 
这给了我字符列表和第一个元素:
\A

但我不知道如何从列表中删除它,因为两个值都不比较:字符值和列表值

尝试了这种奇怪的方法,但没有成功:

((eq? (make-string 1 (car (string->list"ABC"))) (car (list 'A 'B 'C 'D))))
不工作,因为字符串值与第一个列表值不比较

如何从原始列表中比较和删除第一个字符串字母表

错误,因为列表不能有字符串元素值:

事实并非如此。列表可以有字符串和字符作为其元素,没有问题。出现错误是因为您在字符串而不是列表上使用了
car

(car (list->string(list(car (string->list "ABC")))))
好的,这里您正在调用
(string->list“ABC”)
,它将为您提供一个包含字符a、B和C的列表。现在您正在调用
car
,并返回字符a。到目前为止没有问题

但是,您正在对该字符调用
list
,获取一个仅包含字符a的列表,然后使用
list string
将其转换为字符串
“a”
。这仍然是完全合法的。但是你在字符串上调用
car
“A”,这就是错误,因为你在字符串上调用
car
,但是
car
只接受一个列表(实际上是任何一对)作为它的参数

由于您试图将A与
('A'B'C'D)
的第一个元素进行比较,即
'A
,它是一个符号,因此您可能希望将字符串
“A”
转换为符号
'A
(或将符号
'A
转换为字符串
“A”
)。为此,您可以使用函数
string->symbol
而不是
car

一旦您有了符号
A
,您就可以使用
过滤器
功能轻松地将其从列表中删除:

(let ((a (string->symbol (list->string (list (car (string->list "ABC")))))))
  (filter (lambda (x) (not (eq? x a))) '(A B C)))
大概是这样的:

(define lst '(#\a #\b #\c #\d))
(define str (string->list "abc"))

(define (reduce-list lst str)
  (cond
     [(empty? str) lst]
     [else (reduce-list (remove (first str) lst) (rest str))]
  )
)

(reduce-list lst str)
结果:

(list #\d)

你能把列表定义为(定义lst’(#\a#\b#\c#\d))吗?是的!谢谢当我再次运行它时才意识到。在问题中改变它。但是我的问题仍然是如何从列表中删除字符串“ABC”的第一个元素(ABC)。@jillika:一旦你有了符号,你就可以使用filter了。查看我的编辑。我确实尝试过这样做。但我不想使用特定的字符列表。这就是问题的症结所在。