我怎么知道一个表达式是否是一个延续?

时间:2018-12-07 14:05:50

标签: racket continuations

(+ 2 (let/cc cont
    (begin
     (set! global-cont cont)
     3)))
5

global-cont
#<continuation>

(global-cont 5) ; global-cont: (+ 2 _)
7

我知道整个块(+ 2 ... 3)))是连续的。但是为什么global-cont也是延续?我试图检查let/cc document,但这很难理解。

2 个答案:

答案 0 :(得分:1)

在此表达式中:

import {
    ChangeDetectionStrategy,
    Component,
    OnInit
} from "@angular/core";
import { Observable, interval } from "rxjs";
import { map, distinctUntilChanged } from "rxjs/operators";
import moment, { Moment } from "moment"; // using @types/moment

@Component({
    selector: "app-clock",
    templateUrl: "./clock.component.html",
    changeDetection: ChangeDetectionStrategy.OnPush
})
export class ClockComponent implements OnInit {

    pageLoaded: Moment;
    time: Observable<string>;

    constructor() {}

    ngOnInit() {
    this.time = interval(1000*60).pipe( // why you need 1s interval with HH:mm time format simply update it every minute not every second.
      map(() => {
        this.pageLoaded = moment(new Date()); // you need the value of now not the value of the initialized time.
        return this.pageLoaded.format("HH:mm A");
      })
    );
  }
}

(let/cc cont body ...) continuation cont,在体内,您正在执行以下操作:

(+ 2 _)

因此,基本上,您是将(set! global-cont cont) 分配给cont,这也是它的延续。

答案 1 :(得分:1)

我认为我不同意“整个块(+ 2 ...)是连续的”。如果用“继续”来表示“由let / cc或它的等价物(呼叫/ cc等)捕获的值”,那么整个块就不是延续。

因此:cont是续集,因为您是用let/cc捕获的。 global-cont是一个延续,因为您为其分配了一个延续。