ラケットコントラクトシステムを使用していますが、引数のない関数をエクスポートしたいと思います。これは、引数のないラムダ式を返します。例:
#lang racket
(define (foo)
(do-somthing)
(lambda ()
(do-other things)))
この種の機能の契約書を書く方法を知っている人はいますか?
ラケットコントラクトシステムを使用していますが、引数のない関数をエクスポートしたいと思います。これは、引数のないラムダ式を返します。例:
#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ドキュメントの高階関数に関するコントラクトを参照してください。