List 方案创建列表
你好,这是我的问题 我想从原始列表中创建2个子列表,如下所示List 方案创建列表,list,map,scheme,List,Map,Scheme,你好,这是我的问题 我想从原始列表中创建2个子列表,如下所示 OriginalL '( (item1)(item2)(item3)(node1)(node2)(item4) ) ;its a list of lists 我要创建的列表 itemL '((item1)(item2)(item3)(item4)) ;only contains item type nodeL '((node1)(node2)) ;only contains node type 这是我的函数,它不
OriginalL '( (item1)(item2)(item3)(node1)(node2)(item4) ) ;its a list of lists
我要创建的列表
itemL '((item1)(item2)(item3)(item4)) ;only contains item type
nodeL '((node1)(node2)) ;only contains node type
这是我的函数,它不能正常工作
(define itemL null)
(define nodeL null)
(define (separate OriginalL)
(map (lambda (i)
(if (item? i)
(cons itemL i)
(cons nodeL i))
OrignalL))
但是由于某种原因,我不能得到我想要的清单。问题是什么。项目?仅根据原始列表中的项目类型返回#t或#f。谢谢看起来您希望
分开
产生填充两个全局列表的副作用。在这种情况下,您可以使用append代码>在处理原始列表时向其添加数据:
(define itemL '())
(define nodeL '())
(define (separate OriginalL)
(map (lambda (i)
(if (item? i)
(append! itemL i)
(append! nodeL i))
OrignalL))
如果您使用的方案不支持append代码>你可以自己写。例如,请参见:看起来您希望分离
具有填充两个全局列表的副作用。在这种情况下,您可以使用append代码>在处理原始列表时向其添加数据:
(define itemL '())
(define nodeL '())
(define (separate OriginalL)
(map (lambda (i)
(if (item? i)
(append! itemL i)
(append! nodeL i))
OrignalL))
如果您使用的方案不支持append代码>你可以自己写。例如,请参阅:如果您使用的是R6RS,则只需执行以下操作:
(let-values (((a b) (partition item? OriginalL))
(set! itemL a)
(set! nodeL b))
许多其他计划也将支持这一点。也许可以研究一下SRFI1支持。如果您使用的是R6RS,您只需执行以下操作:
(let-values (((a b) (partition item? OriginalL))
(set! itemL a)
(set! nodeL b))
许多其他计划也将支持这一点。也许可以研究一下SRFI1支持。这里有一个简单的方法来解决您的问题:
(define itemL (filter item? OriginalL))
(define nodeL (filter (compose not item?) OriginalL))
以下是解决问题的简单方法:
(define itemL (filter item? OriginalL))
(define nodeL (filter (compose not item?) OriginalL))
请考虑重新格式化您的代码,以便使用编辑工具使其更可读。请考虑重新格式化您的代码以使其更易于使用编辑工具。您的意思是<代码>追加!<代码>在那种情况下?是的,这就是我想做的。但它仍然为itemL和nodeL提供空列表。分开后。您测试过此代码吗?@user1233092:您的方案可能支持append代码>。试试看,否则就写:)这是一个微不足道的过程。我应该提到我正在使用racket,#lang racket。从关于实现on-append的链接中,我不能使用set-cdr!有点傻嗯。。。或者,您可以尝试按照(set!itemL(append itemli))
的行重新构造代码。不幸的是,我现在手头没有球拍环境。你不是说append代码>在那种情况下?是的,这就是我想做的。但它仍然为itemL和nodeL提供空列表。分开后。您测试过此代码吗?@user1233092:您的方案可能支持append代码>。试试看,否则就写:)这是一个微不足道的过程。我应该提到我正在使用racket,#lang racket。从关于实现on-append的链接中,我不能使用set-cdr!有点傻嗯。。。或者,您可以尝试按照(set!itemL(append itemli))
的行重新构造代码。不幸的是,我现在手头没有球拍环境。