Scheme 消息传递的概念

Scheme 消息传递的概念,scheme,message,Scheme,Message,我试图确切地理解它(在scheme中)的作用,但它没有多大意义。有人能用简单的语言解释一下吗?非常感谢 问题 我们将通过使用这些参数来代表一个国家:数十亿美元的GDP 美元,面积以百万平方英里为单位,人口以百万为单位。编写一个消息传递过程 (使country mp gdp area population)返回响应以下消息的对象: •“国内生产总值”;简单地返回gdp •“区域”;只需返回该区域 •“人口”;简单地让人口回归 •“pop密度”;返回人口除以面积 •“人均国内生产总值”;返回gdp除

我试图确切地理解它(在scheme中)的作用,但它没有多大意义。有人能用简单的语言解释一下吗?非常感谢

问题

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

•“国内生产总值”;简单地返回gdp

•“区域”;只需返回该区域

•“人口”;简单地让人口回归

•“pop密度”;返回人口除以面积

•“人均国内生产总值”;返回gdp除以人口

•'更大;返回接收另一个国家/地区消息传递对象和 如果第一个县(原始县)的面积大于 第二个国家的区域(传入的国家),否则为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)

基本上,
make country mp
返回一个函数对象(在本例中是一个闭包,它会记住传递到
make country mp
调用中的
gdp
area
population
的值),您可以用一个参数调用该函数对象。该参数与符号
gdp
面积
人口
流行人口密度
人均gdp
更大
匹配,并在每种情况下返回相应的结果

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

(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)))))

隐马尔可夫模型。。。你能告诉我们更多的情况吗?通常,术语消息传递用于许多不同的情况。一般来说,它指。。。传递消息的组件。恐怕那没什么帮助。你说的更多?好的。因为我一点也不知道我在看什么,所以我只提供一个我收到的家庭作业问题的例子。当然,我不是在寻找答案,只是对这个概念的解释,考虑到这个问题,这可能对你更有意义。谢谢你的解释,我现在肯定能更好地理解它。然而,rhs在lambda中是什么意思?“rhs”通常指右手边。请注意,
rhs
用于获取
(>area(rhs'area))
中的右侧参数。为了让右撇子更清楚,假设我们可以使用中缀符号,比如
area>(rhs'area)
@user2789945来添加到c45207的注释中,为了使其更像中缀,可以将其看作是
lambda-rhs:area>rhs.area()
(Python语法)。(是的,我确实想说的是右手边。)