List 删除列表(方案)中的空白元素
我有几个元素的列表,其中一些有用并且有文本,一些是“”(空/空),一些是各种空白(“,”,”) 是否有一个内置函数来检查整个元素是否为空白? 我只是想说清楚,我不想(“foo foo 1 foo 2”)变成(“foo foo 1 foo 2”) 谢谢 编辑:当我试图实现Justin Ethier的解决方案时,我遇到了这个错误。 错误:要应用的类型错误:“” 我运行的代码是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
;;;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#不是函数式编程语言,使用函数式语言时,解决这一问题的方法不同。