如何返回列表中一个结构的所有数据

问题描述

我有一个问题,发生的事情是我找不到从以下列表中取回所有数据的方法

(define lst1 (list
 (list "p1" "clock" "1000" "10")
 (list "p2" "shirt" "2000" "30")
 (list "p3" "pants" "4000" "20")
 (list "p4" "cap" "2300" "100")
 (list "p5" "string" "1600" "25")
 (list "p6" "glasses" "3000" "34")
 (list "p7" "shoes" "400" "120")))

作为一种结构,该结构应为(制造产品代码产品价格数量

我尝试过,但是它返回的只是列表的一个数据,但它不返回具有结构的整个列表。

(define-struct product (code product price quantity))

(define(load-files lst)
  

  (cond

    [(empty? lst)empty]
    [(list? lst)(list(make-product(first(first lst))(first(rest(first lst)))
                                  (first(rest(first lst)))
                                  (first(rest(rest(first lst))))))]
                                        
    [else(load-files (rest lst))
         ]
    )
  )

解决方法

您不需要进行显式递归,这是使用mapcurryapply之类的高阶函数的好机会:

(define (load-files lst)
  (map (curry apply make-product)
       lst))

为了更加明确,上面的内容等同于:

(define (load-files lst)
  (map (lambda (item)
         (make-product (first item) (second item) (third item) (fourth item)))
       lst))