List 删除列表(方案)中的空白元素

List 删除列表(方案)中的空白元素,list,scheme,lisp,List,Scheme,Lisp,我有几个元素的列表,其中一些有用并且有文本,一些是“”(空/空),一些是各种空白(“,”,”) 是否有一个内置函数来检查整个元素是否为空白? 我只是想说清楚,我不想(“foo foo 1 foo 2”)变成(“foo foo 1 foo 2”) 谢谢 编辑:当我试图实现Justin Ethier的解决方案时,我遇到了这个错误。 错误:要应用的类型错误:“” 我运行的代码是 ;;;Predicate for checking if a string is not empty or full of

我有几个元素的列表,其中一些有用并且有文本,一些是“”(空/空),一些是各种空白(“,”,”)

是否有一个内置函数来检查整个元素是否为空白? 我只是想说清楚,我不想(“foo foo 1 foo 2”)变成(“foo foo 1 foo 2”)

谢谢

编辑:当我试图实现Justin Ethier的解决方案时,我遇到了这个错误。 错误:要应用的类型错误:“”

我运行的代码是

;;;Predicate for checking if a string is not empty or full of whitespaces
(define (notwhitespace? str)
  (if (equal? str "") #F 
    (call-with-current-continuation
     (lambda (return)
      (for-each
       (lambda (c)
         (if (not (char-whitespace? c)) #T #F))
        (string->list str))
        #F)
      )
    )
)
我将其与过滤器结合使用,试图从列表中删除元素

 (define (notwhitespace? str)
  (if (equal? str "") (return #f)
  (every char-whitespace? (string->list str))
  )
)

我使用的是MIT scheme

有一个内置函数
char whitespace?
,可以用来确定单个字符是否为空白。然后,您可以将其包装在函数中以测试整个字符串,例如:

(call/cc
  (lambda (return)
    (for-each
      (lambda (c)
        (if (not (char-whitespace? c)) (return #t) #f))
      (string->list "  ")) ; Substitute your string var here
    #f))
或者更简洁地说:

(every char-whitespace? (string->list my-string))

您可以在此基础上创建一个函数,然后将其与
过滤器一起使用,以从列表中删除任何此类字符串。

据我所知,任何语言中都没有内置函数可以按照您建议的方式清理对象。您可以将列表对象传递给另一个相同类型的方法/函数来完成此任务。一些代码示例可能有助于给出更具体的答案,但以下逻辑可能有助于清理列表对象:

function ListObject functionName(ListObject yourListObject)
{
    ListObject newListObject = new ListObject();
    foreach(var item in yourListObject)
    {
        if(!string.IsNullOrEmpty(item))
        {
            newListObject.Add(item);
        }
    }
    return newListObject;
}

最好使用
和map
等,而不是命令式循环。您好,我尝试实现您的解释,但出现错误(要应用的类型错误:“”)。我把我的代码放在原来的问题上。你能告诉我我做错了什么吗?你需要一个特例来处理空字符串
,而不是为每个
调用
。或者,您可以将示例与
every
.hm一起使用,您的注释意味着将示例与'every'一起使用意味着不需要使用特殊的大小写来处理空字符串。我只是试着使用了每一个,但我仍然得到同样的错误。这个特例还需要吗?它对我有用。您使用的是什么导致错误的代码,您使用的是什么方案?这个问题是关于方案的,而不是C#。我知道你的答案与语言无关,但Scheme的正确解决方法与你发布的C#snippet完全不同。我的答案更倾向于逻辑地解决问题,而不是使用什么解决方案。也许不是正确的答案,但不是正确的逻辑?事实上,即使是逻辑也完全不同。C#不是函数式编程语言,使用函数式语言时,解决这一问题的方法不同。