我正在使用Racket合约系统,我想导出一个没有参数的函数,它返回一个没有参数的lambda表达式,e。 G:
#lang racket
(define (foo)
(do-somthing)
(lambda ()
(do-other things)))
有谁知道如何为这种功能写合同?
答案 0 :(得分:2)
我怀疑它看起来像是:
#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文档中的Contracts on Higher-order Functions。