我试图从类似矩阵的列表列表中创建一个包含列的所有值的列表。 该列表应仅包含数字和
的猜测数(define-struct guess (symbol number))
puzzle1:
(list
(list 'a 'b 'b 'c)
(list 'a 2 1 4)
(list 'f 3 'g 'g)
(list 'f 'h 'i 'i))
参数是矩阵和位置,所以:
(check-expect (used-in-column puzzle1 (make-posn 0 1)) (list 2 3))
(define-struct puzzle (size board constraints))
其中棋盘部分是上面需要的puzzle1示例
我可以创建一个只包含数字的列表,但似乎无法改变代码,因此它会将任何猜测数添加到列表中
所以这里有一个内部猜测的例子,我的代码给出的输出是空的
(check-expect (used-in-column puzzle1partial2 (make-posn 0 1)) (list 2))
拼图板的位置
(list
(list (make-guess 'a 2) 'b 'b 'c)
(list 'a 2 1 4)
(list 'f 3 'g 'g)
(list 'f 'h 'i 'i))
到目前为止,我的代码看起来像这样:
(define (used-in-column puz pos)
(local [(define (columns board pos)
(cond
[(empty? board) empty]
[else (cons (list-ref (first board) (posn-x pos))
(columns (rest board) pos))]))]
(cond
[(empty? puz) empty?]
[else (quicksort (filter number? (columns (puzzle-board puz) pos)) <)])))
我尝试使用if语句和其他变体,但它最终使我的代码变得一团糟而且没有给我任何结果。
有人可以给我任何建议吗?
答案 0 :(得分:2)
至于您的主题,您可以使用标准unzip
:
(define (unzip lsts)
(apply map list lsts))
(unzip '((1 2) (a b))) ; ==> ((1 a) (2 b))
如果您只想要一行,请使用list-ref:
(map (lambda (x) (list-ref x 1)) '((1 2) (a b))) ; ==> (2 b)
我真的不明白你的代码应该做什么,我也不能运行它(我认为缺乏一个结果)所以我就把它留在这里。