Racket:高阶函数合约

发布于 2024-10-18 14:38:04 字数 196 浏览 5 评论 0原文

我正在使用 Racket 合约系统,我想导出一个没有参数的函数,它返回一个没有参数的 lambda 表达式,例如:

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

有人知道如何为这种函数编写合约吗?

I am using Racket contract system, and I want to export a function of no arguments, which returns a lambda expression with no arguments, e. g.:

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

Does anyone know how to write contract for this kind of function?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

━╋う一瞬間旳綻放 2024-10-25 14:38:04

我怀疑它看起来类似于:

#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 文档中的高阶函数

I suspect it would look something along the lines of:

#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)) is a contract that matches functions that returns another function, which, when evaluated, returns a single integer value.

But if you'd like to relax return values of foo, you'd use just any instead of any/c, which allows any number of return values, not just a single value. Consider:

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

See Contracts on Higher-order Functions in Racket documentation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文