我有这个函数可以创建一个包含其他问题中的初始元素的列表Lisp 中带有初始元素的列表从 99 开始到 0 https://stackoverflow.com/questions/59039638/list-with-initial-element-are-start-from-99-to-0-in-lisp/59040324#59040324
(defun newList (&optional(n 100))
(loop for i from (- n 1) downto 0 collect i))
(defun board (newList &optional(n 10))
(cond
((null newList) nil)
(t (cons (subseq newList 0 n) (board (subseq newList n) n)))))
(defun show-board (board)
(format T "~%")
(mapcar (lambda (x) (format T " ~A ~%" x)) board)
(format nil "")
)
(show-board (board (newList)))
(99 98 97 96 95 94 93 92 91 90)
(89 88 87 86 85 84 83 82 81 80)
(79 78 77 76 75 74 73 72 71 70)
(69 68 67 66 65 64 63 62 61 60)
(59 58 57 56 55 54 53 52 51 50)
(49 48 47 46 45 44 43 42 41 40)
(39 38 37 36 35 34 33 32 31 30)
(29 28 27 26 25 24 23 22 21 20)
(19 18 17 16 15 14 13 12 11 10)
(9 8 7 6 5 4 3 2 1 0)
在这里查看结果https://ideone.com/Paorct https://ideone.com/Paorct并用此功能删除重复的数字
(defun remove-duplicate (pred l)
(cond ((null l) NIL)
((funcall pred (car l)) (remove-duplicate pred (cdr l)))
(T (cons (car l) (remove-duplicate pred (cdr l))))))
我想实现一个接收列表并随机更改其数字的函数。创建一个递归函数并使用
nth
函数、随机函数和
删除重复项
函数,其中该函数必须从列表中删除与随机找到的数字相等的数字。
停止条件是链表为空;
应该使用
let
使用以下语句在本地存储在随机位置找到的数字:
(nth (随机 (长度 l)) l)
使用
删除重复项
您应该从递归函数中作为参数传递的列表中删除随机找到并存储在本地的数字。
我有这个,但它不起作用,我试图理解算法
我的疑问是,如何实现随机列表的功能
无重复号码
(defun shuffle-list (l)
;; iterate 99 times
(dotimes (i (- (length l) 1))
;; store random number to n
(let ((n (nth (random (length l)) l)))
;; print value of n
(format t "~A ~%" n)
(cond
((null l) nil)
;; I have this but it´s not show the new list
(t (remove-duplicate #'(lambda (x) (= x n)) l))))))
例如结果应该是
(94 25 54 89 21 8 36 14 41 96)
(78 47 56 23 5 49 13 12 26 60)
(0 27 17 83 34 93 74 52 45 80)
(69 9 77 95 55 39 91 73 57 30)
(24 15 22 86 1 11 68 79 76 72)
(81 48 32 2 64 16 50 37 29 71)
(99 51 6 18 53 28 7 63 10 88)
(59 42 46 85 90 75 87 43 20 31)
(3 61 58 44 65 82 19 4 35 62)
(33 70 84 40 66 38 92 67 98 97)