问题描述
我有一个问题,发生的事情是我找不到从以下列表中取回所有数据的方法:
(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))
]
)
)
解决方法
您不需要进行显式递归,这是使用map
,curry
和apply
之类的高阶函数的好机会:
(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))