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了。查看我的编辑。我确实尝试过这样做。但我不想使用特定的字符列表。这就是问题的症结所在。