Tôi đã xác định một hàm true?
để sử dụng với count trong vợt/danh sách.Bối rối về các hợp đồng vợt
(define (true? expr)
(and (boolean? expr) expr #t))
Tôi nhận thấy tôi có thể cung cấp đối số dạng số và hàm của tôi vui vẻ trả về #f
.
> (true? 6)
#f
Vì vậy, tôi nghĩ tôi sẽ khám phá bằng cách sử dụng một hợp đồng vợt để làm cho các đối số không logic trả về lỗi trong vi phạm hợp đồng. Vì vậy, tôi đặt mã này tại hình chữ nhật của tệp của tôi:
(provide (contract-out
[true? (-> boolean? boolean?)]))
Tuy nhiên, sau khi thêm hợp đồng, tôi vẫn nhận được hành vi tương tự như trên trong vợt REPL. Tôi không hiểu nó có thể thế nào. Tôi đang thiếu gì?
Lưu ý rằng đối với ngữ cảnh cụ thể của bạn, bạn có thể sử dụng 'giá trị', vì Racket coi mọi thứ là đúng trừ' # f'. Ví dụ: '(giá trị đếm '(số lượng #f đúng #f #f thứ #f))' – dyoo