我正在尝试从包含这些成员的列表中删除字符串中存在的成员。
示例:
字符串:"ABC"
列表:('A 'B 'C 'D)
待办事项:从列表中删除字符串的第一个元素
从字符串中删除元素:
我使用以下方法将其转换为列表:
(car (string->list"ABC")
这给了我字符列表和第一个元素:#\A
但我不知道如何从列表中删除它,因为两个值都不比较:字符和列表值。
尝试了这种不起作用的奇怪方法:
((eq? (make-string 1 (car (string->list"ABC"))) (car (list 'A 'B 'C 'D))))
不起作用,因为字符串值与第一个列表值不比较。
我如何比较&从原始列表中删除第一个字符串字母??
答案 0 :(得分:2)
错误,因为列表不能包含字符串元素值:
事实并非如此。列表可以包含字符串以及字符作为其元素,没有问题。您收到错误的原因是您在字符串上使用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"
转换为符号{ {1}}(或符号'A
进入字符串'A
)。为此,您可以使用"A"
功能代替string->symbol
。
获得符号car
后,您可以使用A
功能轻松将其从列表中删除:
filter
答案 1 :(得分:0)
这样的事情:
(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)