簡體   English   中英

球拍:高階函數的合約

[英]Racket: contracts on higher-order functions

我正在使用Racket合約系統,我想導出一個沒有參數的函數,它返回一個沒有參數的lambda表達式,例如:

#lang racket
(define (foo)
  (do-somthing)
  (lambda ()
    (do-other things)))

有誰知道如何寫這種功能的合同?

我懷疑它看起來像是:

#lang racket/load

(module m racket
  (provide/contract [foo (-> (-> any/c))])
  (define (foo)
    (+ 10 3) ; do something
    (lambda ()
      (+ 40 2) ; do other things
      )))

(module n racket
  (require 'm)
  ((foo)))

(require 'n)

(-> (-> any/c))是一個與返回另一個函數的函數匹配的契約,在求值時,它返回一個整數值。

但是如果你想放松foo返回值,那么你只需使用any而不是any/c ,它允許任意數量的返回值,而不僅僅是單個值。 考慮:

(module m racket
  (provide/contract [foo (-> (-> any))])
  (define (foo)
    (+ 10 3) ; do something
    (lambda ()
      (values (+ 40 2) 666); do other things
      )))

請參閱Racket文檔中的高階函數合同

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM