这个题目 粗看起来好像是很简单,但是我在实现的时候,真的是废了好大的力气,主要原因有三点,第一,对clojure语言的属性程度不够高,第二,课本语言与clojure语言的差异点,我自以为理解的很透彻,导致了出现很奇异的现象,我找不到解释,一点思路都没有。第三,也就是最关键的一点,我根本不知道如何实现生成子集。
这三点纠缠在一起,我始终无法实现。最终不得不求助于ai,由ai出了lisp标准语言的版本。通过研究标准答案,我解决了第三个问题。然后很自信的翻着手册翻译为clojure实现。跑出来的结果跟我原来的实现没区别,傻眼。不得不像恶势力低头,再次求教AI给出clojure版本。
;这是lisp版本,ai生成,没有运行过
(defun subsets (lst)
(if (null lst)
(list nil)
(let ((rest-subsets (subsets (cdr lst))))
(append rest-subsets (mapcar #'(lambda (subset) (cons (car lst) subset)) rest-subsets)))))
;Ai给出的clojure版本 有运行,但是运行结果与题目预期有差异
(defn subsets [lit]
(if (empty? list)
#{#{}}