我正在使用 Racket 合约系统,我想导出一个没有参数的函数,它返回一个没有参数的 lambda 表达式,例如:
#lang racket
(define (foo)
(do-somthing)
(lambda ()
(do-other things)))
有谁知道如何为这种功能编写合同?
我正在使用 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
,你可以使用 justany
而不是any/c
,它允许任意数量的返回值,而不仅仅是单个值。考虑:
(module m racket
(provide/contract [foo (-> (-> any))])
(define (foo)
(+ 10 3) ; do something
(lambda ()
(values (+ 40 2) 666); do other things
)))
请参阅Racket 文档中的高阶函数合同。