Lambda在Scheme中遇到麻烦

时间:2014-05-24 03:53:48

标签: lambda scheme

  

此问题存储有关纳税人及其税收的信息   计算。需要一种新型纳税人:;;纳税人是一个   结构(make-taxpayer inc c),其中;; inc是一个非负数   (纳税人的收入),和;; c是函数(Num - > Num)   消耗非负;;收入并产生非负数   税收;;欠收入(定义结构纳税人(收入)   计算))写一个方案函数平均税 - 消费一个   纳税人结构清单,称为lotp,并产生平均值   在lotp中所有纳税人的欠税金额。如果lotp为空,那么   产生0。例如,使用与当前对应的函数   联邦税率,(平均税)(列表(纳税人70000)   (a)(+ 6593(* 0.22( - a 43953)))))(纳税人0(lambda(a)(*)   0.15 a)))(纳税人140000(lambda(a)(+ 28837(* 0.29( - a 136270)))))))   => 14080.68

我正在努力解决上述问题......以下是我的尝试:

(define-struct taxpayer (income calculation))

(define (average-taxes lotp)
  (/
   (foldr + 0
         (map (lambda (t) ((taxpayer-calculation t) taxpayer-income t)) lotp))
    (length lotp)))
I get the following error when running this test:

    (define mylist
      (list
    (make-taxpayer 70000 (lambda (a) (+ 6593 (* 0.22 (- a 43953)))))
    (make-taxpayer 0 (lambda (a) (* 0.15 a)))
    (make-taxpayer 140000 (lambda (a) (+ 28837
    (* 0.29 (- a 136270)))))))

    (average-taxes mylist) =>

    ... 2 Quesion 4.rkt:11:21: expects only 1 argument, but found 2

关于错误发生的原因和我可以使用的方法的任何建议?

1 个答案:

答案 0 :(得分:0)

你有一个简单的错字; taxpayer-income是一个程序,因此您需要说(taxpayer-income t)

(define (average-taxes lotp)
  (/ 
   (foldr + 0
          (map (lambda (t) ((taxpayer-calculation t) (taxpayer-income t))) lotp))
   (length lotp)))