clojure - 尝试快速排序列表并将值返回给新变量
问题描述
我正在尝试编写一个程序,该程序采用整数列表并使用快速排序或合并排序对其进行排序。我很确定函数编写正确,但是当我尝试打印结果时,它没有排序。我是clojure的新手,所以我不知道我是否没有正确返回列表或什么。
(ns mergetime.core)
(use 'clojure.java.io)
(require '[clojure.string :as str])
(defn -main[])
(def string (slurp "100.txt"))
(def numbers (str/split string #"\W+"))
(def nums (mapv #(Integer/parseInt %) numbers))
(defn qsort [L]
(if (empty? L)
'()
(let [[pivot & L2] L]
(lazy-cat (qsort (for [y L2 :when (< y pivot)] y))
(list pivot)
(qsort (for [y L2 :when (>= y pivot)] y))))))
(def nums2 (qsort[nums]))
(println nums2)
我除了要排序的列表,但是我只是得到一个未排序的列表
解决方案
问题是您将整数向量包装在另一个向量中。
尝试从对 . 的调用中删除方括号qsort
。
相反,试试这个:
(def nums2 (qsort nums))
推荐阅读
- r - 将 parLapply 与 data.table 的 rbindlist 一起使用会导致 CPU 超过 100%
- git - git pull -r 从新存储库中删除本地文件
- spring-integration-dsl - Spring Integration DSL: lambda 返回消息
在句柄方法中,例如使用 DelegatingSessionFactory? - excel - 抓取内容时无法摆脱弹出的空白屏幕
- c++ - 编译前确定数组长度
- flask - Flask CORS 问题 - OPTION 请求未通过
- flutter - 颤振无线电值不变
- c# - 如何更改 button.text 而不点击它?
- android - 如何从联系人列表中获取特定选定联系人的所有数据
- c - 为什么 Linux VmSize VmData 大于代码的估计值?