양수 만 받아들이는 함수를 작성 중이며, 모듈과 다른 곳에서 올바르게 사용되도록하고 싶습니다. Typed Racket에서 define/contract (또는 이와 동등한)을 어떻게 사용합니까?
나는#lang typed/racket
(require racket/contract)
(: excited-logarithm (-> Number Number))
(define/contract (excited-logarithm ([x : Number]) : Number)
(-> (>=/c 0) number?)
(displayln "Hold on to your decimals, we're going in!")
(log x))
을 쓰고 싶었지만 형식화 된 라켓은 자신의 define/contract
을 제공하지 않으며, 바닐라 define/contract
은 (는 구문 오류가 발생합니다) 형식화 된 라켓의 주석을 이해하지 못합니다.
어떻게 든이 문제를 해결할 수 있습니까? 을 define/contract
의 방법으로 excited-logarithm
에 연결할 수 있습니까?
또한 은이 아니어야하는 이유가 있습니까? 계약과 유형을 혼합하는 것이 바람직하지 않습니까?
참고 : 실제로 여기에 종속 된 타이핑이 필요하다고 가정하겠습니다.하지만 그건 라켓에서 사용할 수 없습니다.
와우, 내가 참조 이러한 놓친, 감사합니다! 그러나 일반적인 경우에는 문제가 남아 있습니다. – shadowtalker
"일반"케이스가 얼마나 일반적인지에 따라 다릅니다. 정제 유형을 사용하여 이와 같은 몇 가지 제약 조건을 캡처 할 수 있으며이 간단한 수급 계약 매크로를 직접 정의하여이 검사를 수행 할 수 있습니다. 대부분의 흥미롭고 도전적인 계약의 일부는 함수 유형에 대해 발생합니다. –
"상세 검색 유형"이란 무엇입니까? Typed Racket 문서에서 해당 용어를 검색했지만 찾지 못했습니다. – shadowtalker