List 是否从列表(方案)中删除符号?

List 是否从列表(方案)中删除符号?,list,scheme,symbols,List,Scheme,Symbols,我对scheme相当陌生,一直在玩弄它,我给自己带来的一个问题是从单个元素列表中删除所有符号 (define lst '(a 2 3 a 2 d 3)) (define removeSymbol (lambda (lst) (if (null? lst) '() (if (symbol? (car lst)) (removeSymbol (cdr lst))

我对scheme相当陌生,一直在玩弄它,我给自己带来的一个问题是从单个元素列表中删除所有符号

    (define lst '(a 2 3 a 2 d 3))

    (define removeSymbol
      (lambda (lst)
            (if (null? lst)
             '()
             (if (symbol? (car lst))
                 (removeSymbol (cdr lst))
                 (cons car lst) (removeSymbol (cdr lst))))))

    (removeSymbol lst)
我觉得这应该行得通,但它没有给我我所期望的。 我的期望:(清单2)


任何帮助或指导都将不胜感激。

您提到了您未实现的期望,但没有提到您的结果

我猜您看到了一个语法错误(在Racket中,我得到:
if:bad syntax;在关键字之后有4个部分),因为嵌套的
if
的主体包含3个s表达式

  (if (symbol? (car lst))
    (removeSymbol (cdr lst))
    (cons car lst) 
    (removeSymbol (cdr lst)))
如果将参数重新排列,使其看起来如下所示,则函数应按预期工作:

(define lst '(a 2 3 a 2 d 3))

(define (removeSymbol lst)
    (if (null? lst)
      '()
      (if (symbol? (car lst))
        (removeSymbol (cdr lst))
        (cons (car lst) (removeSymbol (cdr lst))))))

(removeSymbol lst) ;; '(2 3 2 3)
我很感激您只是将此示例作为一个学习练习,但您尝试做的事情也可以(可以说)更习惯地使用前奏功能
过滤器
否定
符号?

(filter (negate symbol?) lst) ;; '(2 3 2 3)

你提到了你未实现的期望,但没有提到你的结果

我猜您看到了一个语法错误(在Racket中,我得到:
if:bad syntax;在关键字之后有4个部分),因为嵌套的
if
的主体包含3个s表达式

  (if (symbol? (car lst))
    (removeSymbol (cdr lst))
    (cons car lst) 
    (removeSymbol (cdr lst)))
如果将参数重新排列,使其看起来如下所示,则函数应按预期工作:

(define lst '(a 2 3 a 2 d 3))

(define (removeSymbol lst)
    (if (null? lst)
      '()
      (if (symbol? (car lst))
        (removeSymbol (cdr lst))
        (cons (car lst) (removeSymbol (cdr lst))))))

(removeSymbol lst) ;; '(2 3 2 3)
我很感激您只是将此示例作为一个学习练习,但您尝试做的事情也可以(可以说)更习惯地使用前奏功能
过滤器
否定
符号?

(filter (negate symbol?) lst) ;; '(2 3 2 3)

我在学习中还没有遇到过过滤器。谢谢你的建议和意见!是的,你们确定我的结果是正确的。我在学习中还没有遇到过过滤器。谢谢你的建议和意见!是的,你确定我的结果是正确的。