Suy luận kiểu dựa trên ràng buộc với dữ liệu đại số


11

Tôi đang làm việc trên một ngôn ngữ dựa trên biểu thức của phả hệ ML, vì vậy nó tự nhiên cần loại suy luận> :)

Bây giờ, tôi đang cố gắng mở rộng một giải pháp dựa trên ràng buộc cho vấn đề suy ra các loại, dựa trên một triển khai đơn giản trong EOPL (Friedman và Wand), nhưng chúng là các kiểu dữ liệu đại số bước bên thanh lịch.

Những gì tôi có cho đến nay hoạt động trơn tru; nếu một biểu thức ea + b, e : Int, a : Intb : Int. Nếu elà một trận đấu,

match n with
  | 0 -> 1
  | n' -> n' * fac(n - 1)`, 

Tôi một cách đúng đắn có thể suy ra rằng t(e) = t(the whole match expression), t(n) = t(0) = t(n'), t(match) = t(1) = t(n' * fac(n - 1)và vân vân ...

Nhưng tôi rất không chắc chắn khi nói đến các kiểu dữ liệu đại số. Giả sử một chức năng như bộ lọc:

let filter pred list =
  match list with
    | Empty -> Empty
    | Cons(e, ls') when pred e -> Cons (e, filter ls')
    | Cons(_, ls') -> filter 

Để loại danh sách duy trì đa hình, Nhược điểm cần phải là loại a * a list -> a list. Vì vậy, trong việc xây dựng những khó khăn này, tôi rõ ràng là cần phải nhìn lên các loại nhà xây dựng đại số của tôi - vấn đề bây giờ tôi có là 'bối cảnh nhạy cảm' của nhiều công dụng của nhà xây dựng đại số - làm thế nào để thể hiện trong các phương trình khó khăn của tôi rằng atrong mỗi trường hợp cần giống nhau?

Tôi gặp khó khăn khi tìm một giải pháp chung cho vấn đề này, và tôi không thể tìm thấy nhiều tài liệu về điều này. Bất cứ khi nào tôi tìm thấy một cái gì đó tương tự - ngôn ngữ dựa trên biểu thức với suy luận kiểu dựa trên ràng buộc - chúng chỉ dừng lại ở kiểu dữ liệu đại số và đa hình.

Bất kỳ đầu vào được nhiều đánh giá cao!


@Guy Tôi không có nghĩa là vô duyên, nhưng tôi không tìm kiếm một giải pháp sẵn có - bạn có đề xuất nào không? Hầu hết các tài liệu hiện có mà tôi có thể tìm thấy (như các tài liệu của INRIA về ML, OCaml ...) rộng hơn nhiều so với những gì tôi cần (và có khả năng hiểu được).
Kris

Tôi sẽ bắt đầu với chương suy luận trong ATTAPL , tôi nghĩ họ thảo luận mọi thứ bạn cần ở mức có thể truy cập được.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles Tôi nghĩ ATTAPL là cuốn sách PL 'cổ điển' duy nhất tôi không có trên kệ sách của mình: P Nhưng cảm ơn, tôi sẽ xem vào thứ hai, tôi ngồi trên sàn tại Uni với khoảng 10 bản được phân phối trên các văn phòng: )
Kris

@Kris bạn đã bao giờ tìm thấy một tài nguyên có thể truy cập giải quyết vấn đề này chưa? Việc triển khai "ML nhỏ" của tôi bị mắc kẹt chính xác trong vấn đề này ... Tôi nghĩ rằng tôi đã tìm thấy chương có liên quan từ ATTAPL ( pauillac.inria.fr/~fpottier/publis/emlti-final.pdf ) và đọc lướt phần về đại số loại dữ liệu, nhưng tôi sợ nó hơi quá đầu tôi.
michiakig

@spacemanaki Vâng, từ đó tôi đã tìm thấy pdfs.semanticscholar.org/8983/NH là một tài nguyên tuyệt vời cho chính xác điều này.
Kris

Câu trả lời:


2

Xem: Mini ML Cụ thể là phần Kiểu suy luận.

Mã này chứa mã mẫu trong F # cho trình phân tích cú pháp hoàn chỉnh của ngôn ngữ chức năng đơn giản. Quan trọng hơn, phần Suy luận kiểu thực hiện thuật toán Hindley-Milner, phần được tìm thấy trong hầu hết các hệ thống suy luận kiểu. Tác giả cũng cung cấp các liên kết đến hai tài liệu quan trọng khác để giúp hiểu về Hindley-Milner; một là một loại giới thiệu cấp cao và một là một bài viết mô tả việc thực hiện thuật toán trong mã.


Liên kết đơn thường không phải là một câu trả lời. Hãy giải thích những gì có thể được tìm thấy ở đó và tại sao nó giúp.
Raphael
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.