0

我试图准确地理解它的作用(在方案中),但这没有多大意义。有人可以尝试用简单的术语来解释它吗?这将不胜感激!

有问题的问题

我们将通过使用以下参数来代表一个国家:数十亿美元的 GD​​P、数百万平方英里的面积和数百万人口。编写一个消息传递过程(make-country-mp gdp area population),返回一个响应以下消息的对象:

•'gdp; 只需返回 gdp

• '区域 ; 只需返回该区域

• '人口 ; 简单地返回人口

• '流行密度; 返回人口除以面积

• '人均国内生产总值 ; 返回 GDP 除以人口

• 'is-biger ; 返回一个接收另一个国家消息传递对象的过程,如果第一个国家(原始国家)的面积大于第二个国家(传入的国家)的面积,则返回方案布尔值 true,否则返回 false。

旁注:我确实有大部分问题的工作代码,但我只想解释它是如何工作的。我所要做的就是遵循消息传递工作方式的一般形式,但我一点也不明白。这里是

(define (make-country-mp gdp area population)
    (define (dispatch msg)
      (cond ((equal? msg 'gdp) gdp)
        ((equal? msg 'area) area)
        ((equal? msg 'population) population)
        ((equal? msg 'pop-density) (/ population area))
        ((equal? msg 'gdp-per-capita) (/ gdp population))
       ;((equal? msg 'is-bigger) ; unsure of the code here
        (else (error "invalid option" msg)))) 
     dispatch)
4

1 回答 1

2

基本上,make-country-mp返回一个函数对象(在这种情况下是一个闭包,它记住传递给调用的gdparea和的值),您可以使用一个参数调用它。参数与符号、、、、和相匹配,并在每种情况下返回适当的结果。populationmake-country-mpgdpareapopulationpop-densitygdp-per-capitais-bigger

如果您知道case,您可能会发现这更容易阅读:

(define (make-country-mp gdp area population)
  (lambda (msg)
    (case msg
      ((gdp) gdp)
      ((area) area)
      ((population) population)
      ((pop-density) (/ population area))
      ((gdp-per-capita) (/ gdp population))
      ((is-bigger) (lambda (rhs)
                     (> area (rhs 'area))))
      (else (error "invalid option" msg)))))
于 2013-11-12T08:07:49.970 回答