使用foldl/map查找置换?

使用foldl/map查找置换?,map,functional-programming,scheme,fold,Map,Functional Programming,Scheme,Fold,教授给我们展示了一种找出列表所有排列的方法,即(abc)=>((abc)(acb)(bac)(bca)(cba)(cba)(cab)),但她说用foldl或map可以更有效地完成 全新的功能思维。我一辈子都搞不清楚这一点。以下是scheme版本(您标注了“foldl”,因此本页上也有haskell版本): 这个怎么样 #lang racket (define l '(apple banana cheese desk)) (remove-duplicates (for/list ([i 1

教授给我们展示了一种找出列表所有排列的方法,即(abc)=>((abc)(acb)(bac)(bca)(cba)(cba)(cab)),但她说用foldl或map可以更有效地完成

全新的功能思维。我一辈子都搞不清楚这一点。

以下是scheme版本(您标注了“foldl”,因此本页上也有haskell版本):

这个怎么样

#lang racket    
(define l '(apple banana cheese desk))
(remove-duplicates (for/list ([i 1000000]) (shuffle l)))
当然,您会希望增加长列表的常数


(毫无帮助)

问题是关于Scheme,而不是Clojure或LISP。编辑:另外,您没有使用fold…Haskell版本使用foldr,而不是foldl(或fold left)。。。为什么要提到Haskell???@leppie主题初学者提到了使用foldl或map的解决方案。此外,示例有助于理解解决问题的函数方法,该方法也可应用于scheme版本解决方案。@leppie My bad。只是没有注意到“scheme”标签。谢谢。你可能想澄清一点:你的教授是指“更高效”的意思,即运行(渐进)更快,还是说“更高效”的意思,即代码更少?Map和Foldl几乎出现在Scheme中的每个列表迭代问题中,因此评论并不令人惊讶。
#lang racket    
(define l '(apple banana cheese desk))
(remove-duplicates (for/list ([i 1000000]) (shuffle l)))