从列表中移除符号(Scheme)?

时间:2016-04-29 01:55:44

标签: list scheme symbols

我对计划很新,并一直在玩它,我给自己的一个问题是从一个元素列表中删除所有符号。

    (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 3 2 3)

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

1 个答案:

答案 0 :(得分:0)

你提到了你未满足的期望,但没有提到你的结果。

我猜测你发现语法错误(在Racket中,我得到:[None]),因为嵌套None的正文包含3个s表达式。

is

如果你将你的parens洗牌,使它们看起来如下,你的功能应该按预期工作:

is

我感谢你,只是通过这个例子作为一个学习练习,但是你尝试做的事情也可以通过前奏函数a = [] b = a a is [] #false a is b #true 更加惯用地实现。 ,if: bad syntax; has 4 parts after keywordif

  (if (symbol? (car lst))
    (removeSymbol (cdr lst))
    (cons car lst) 
    (removeSymbol (cdr lst)))