下面是一個遞歸函數:遞歸函數失敗斷言
(defn make-control-data [it alphabet]
{:pre [(integer? it) (pos? it)]}
(let [shuffled-alphabet-string (reduce str (shuffle alphabet))]
(if (zero? it)
shuffled-alphabet-string
(str shuffled-alphabet-string (make-control-data (dec it) alphabet)))))
應該採取的整數(it
),指定數目的遞歸調用和字母串列表,例如,["a" "b"]
。它應該使用字母表中的所有字母返回一個長度爲it*length(alphabet)
的隨機排序字符串。如果it = 2
和字母表= ["a" "b"]
該函數應產生一個長度爲(* 2 (count ["a" "b"])) = 4
的隨機字符串,使用字母表中的所有字母["a" "b"]
。
它打破了前提條件(pos? it)
,並返回一個長度爲(it+1)*length(alphabet)
的字符串。
任何人都可以看到有什麼問題嗎?
建議使用高階函數而不是顯式遞歸,如@amalloy – Ankur