我想从list1中选择一个随机元素,将其从list1中删除,然后将其添加到list2中
(define list1 '(1 2 3 4 5 6 7 8)
(define list2 '(9 10)
现在我的问题是,我使用2个函数来更新列表
list1将删除一个随机元素,list2将获得一个随机元素,但它并不总是相同的元素
如何使list2获取添加的元素,list1被删除,然后重复这些步骤,直到list1为空?
非常感谢提前
#lang racket
(define list1 '(1 2 3 4 5 6 7 8))
(define list2 '(9 10))
(define (select_random list)
(car (shuffle list)))
(define (update_list list)
(remove (select_random list) list))
(define (addToList list1 target_list)
(append (list (select_random list1)) target_list))
答案 0 :(得分:0)
随机选择一个元素以便在几个地方使用的方法是在函数之外进行:
(define (select-random lst)
(car (shuffle lst)))
现在你需要使用元素来做你的事情:
(define (remove-element element lst)
(remove element lst))
(define (add-element element lst)
(cons element lst))
所以在你的循环中你可以这样做:
(let loop ((list1 '(1 2 3 4 5 6 7 8 9 10))
(list2 '()))
(if (null? list1)
list2
(let ((element (select-random list1)))
(loop (remove-element element list1)
(add-element element list2)))))
; ==> (2 1 5 4 10 7 6 8 9 3)
请注意,remove-element
和add-element
实际上只是remove
和cons
的同义词。他们不会添加任何值,但更改名称。因此你可以省略它们:
(let loop ((list1 '(1 2 3 4 5 6 7 8 9 10))
(list2 '()))
(if (null? list1)
list2
(let ((element (select-random list1)))
(loop (remove element list1)
(cons element list2)))))
实际上,这只是一种非常复杂的(shuffle '(1 2 3 4 5 6 7 8 9 10))
方式。