[英]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.