我如何使用大于或小于符号作为变量,以便当我输入Main> mySort (<) [1,5,3,6,4,1,3,3,2]
或Main> mySort (>) [1,5,3,6,4,1,3,3,2]
时,它会根据我选择输入的符号将列表从高到低或从低到高排序?如何使用'(<)'作为变量?
回答
Data.List中已经有了一个函数,它和你想要的类似,它叫做sortBy。
但是,如果你真的想实现它,你可以使用sortBy是这样的:(用ETA减少)
mySort cop ls = sortBy (\a b -> if (cop a b) then LT else GT) ls
短
甚至:
mySort cop = sortBy (\a b -> if (cop a b) then LT else GT)
这是击败了具有更高阶次功能的整个点... – jozefg 2013-04-24 02:07:10
@jozefg你能解释一下吗?你在谈论传递函数作为参数吗?我回答的问题只是要求< and >,所以我不认为有必要让它适用于各种功能。如果问题是创建一个接受比较函数作为操作符的排序,那么我同意这不是一个好主意。 – Martinsos 2013-04-24 02:11:03
高阶函数可以让你一般地做这种事情,实际上做什么是取**函数**并使用它来产生排序,它的类型sig是'sortBy ::(a - > a - > Ordering) - > [a] - > [a]'这个重量更轻,更安全,使用你的方法你可以传入''*'或其他东西到你的函数中,并得到一个运行时错误,不知道它来自何处 – jozefg 2013-04-24 02:12:26
你可以只传递(<)
,并用它比较每个值。
类似的功能
mySort :: (a -> a -> Ordering) -- Comparator function
-> [a]
-> [a]
和Haskell是太聪明了,这个已经存在了sortBy
。这使您可以在函数返回传递的Ordering
这只是
data Ordering = LT | EQ | GT deriving(...)
但你拥有的功能a -> a -> Bool
所以你需要制作成一个排序这一点,那么你就可以sortBy
使用它。
wrap f a b | not $ f a b || f b a = EQ
| f a b = LT
| otherwise = GT
现在你可以使用这个包(<)
和(>)
解除它与sortBy
mySort :: (a -> a -> Bool) -> [a] -> [a]
mySort = sortBy . wrap
我觉得'wrap'的卫兵会更好,因为'| f a b = LT','| f b a = GT' then'|否则= EQ'。 – AndrewC 2013-04-24 21:10:12
- 1. 如何使用'NSLayoutYAxisAnchor`作为变量?
- 2. 如何使用变量作为函数?
- 3. 如何使用变量作为对象?
- 4. 如何使用数组作为变量?
- 5. 如何使用变量的值作为变量
- 6. 如何在Perl中使用变量的值作为变量名?
- 7. 如何在Ruby中使用变量作为变量名?
- 8. CMake如何使用find_package工作变量<name> _DIR
- 9. 使用ID作为变量
- 10. 如何使变量作为变量,而在JavaScript
- 11. 如何使用矢量值作为R中的变量
- 12. 如何使json变量为php变量?
- 13. 如何使用变量作为操作符?
- 14. 如何在的powershell使用数组变量作为自变量,如果语句
- 15. 使用变量作为动作
- 16. 如何使用变量作为函数名来调用python
- 17. 如何使用子域名作为变量(用的.htaccess?)
- 18. 如何在java中使用字符串作为引用变量?
- 19. 使用变量作为对象引用
- 20. 如何使用数组变量作为PHP中的定义变量?
- 21. 如何使用对象变量作为其他变量的来源?
- 22. 如何在asp.net mvc中使用javascript变量作为键访问会话变量?
- 23. 变量$ 1作为变量
- 24. 变量作为自变量
- 25. 如何为DynamicResource使用ViewModel变量?
- 26. 如何在变量中使用变量?
- 27. 如何使用javascript获取表格数据值作为变量
- 28. PHP,如何使用一个字符作为变量名?
- 29. 如何使用函数参数作为变量的一部分?
- 30. 如何使用列表数据作为变量
什么是使用**()**吗? – Martinsos 2013-04-24 02:02:15
是要让它大胆 – user2313601 2013-04-24 02:04:13
请参阅这里:http://stackoverflow.com/questions/16101710/sorting-in-haskell-with-parameter-using-higher-order-function(在你的班级有人?) – hammar 2013-04-24 02:05:30