我正在尝试从列表中删除给定的符号。
这是我写的代码:
(define member?
(lambda (in-sym in-seq)
(if (and (symbol? in-sym) (sequence? in-seq))
(if (null? in-seq)
'()
(append
(if (equal? in-sym (car in-seq)) '() (list (car in-seq)))
(member? in-sym (cdr in-seq)))))))
事实证明,我删除了给定符号的所有出现,尽管我只想删除第一次出现。有人可以帮我吗?
答案 0 :(得分:3)
您可以使用内置程序,检查您的口译员是否提供remove
:
(remove 'b '(a b b c b))
=> '(a b c b)
现在,如果您打算自己实现这些功能,我建议您将问题分成两部分:一个程序检查程序是否可以执行(如果inSymbol
是一个符号而{{1} }是一个序列),另一个是执行实际数据删除的inSeq
:
remove-member
答案 1 :(得分:2)
您的问题是您是否附加( member? inSym ( cdr inSeq))
是否找到了该符号。你想要做的是:
(define member?
(lambda (inSym inSeq)
(if (and (symbol? inSym) (sequence? inSeq))
(if (null? inSeq) '()
(if (equal? inSym (car inSeq)) (cdr inSeq)
(append (list (car inSec)) (member? inSym (cdr inSeq)))
)
)
)
)
)
即。如果你找到了符号,只需返回(cdr inSeq),因为你已经完成了。