Có sự khác biệt nào giữa các bản ghi mở rộng và bản đồ phụ thuộc không


7

Trong cài đặt được nhập, các bản ghi có thể được coi là bản đồ từ trường này sang loại khác. Nếu có một hoạt động hợp nhất bản ghi được gõ tốt (cho phép các trường chồng lấp), có sự khác biệt thực sự giữa loại kết quả và bản đồ phụ thuộc trong ngôn ngữ được gõ phụ thuộc không?

Câu trả lời:


6

Các bản ghi đơn giản tương ứng với các bản đồ thuộc loại phụ thuộc (và chúng tôi chưa có thao tác hợp nhất). Chính xác hơn, loại hồ sơ

{ lbl1 : A1, lbl2 : A2, ..., lblN : AN }

tương ứng với loại sản phẩm

∏ (ℓ : label), A ℓ

nơi labellà loại tổng hợp

lbl1 + lbl2 + ... + lblN

A : label → Typelà họ kiểu được định nghĩa bởi

A lbl1 ≡ A1
A lbl2 ≡ A2
       ⋮
A lblN ≡ AN

Loại hồ sơ ở trên cũng tương đương với sản phẩm đơn giản

A1 × A2 × ⋯ × AN.

Bạn hỏi về hồ sơ mở rộng. Có ít nhất hai cách để làm điều này. Nếu không có bất kỳ công nghệ bổ sung nào, chúng tôi có thể mô hình hóa một phần mở rộng của

{ foo : A, bar : B } ≤ { foo : A, bar : B, baz C }

với một vài hàm ánh xạ giữa chúng (chiếu theo một hướng và mở rộng bởi một trường phụ ở hướng khác). Đây là tất cả rất trần tục.

Chúng tôi cũng có thể yêu cầu loại của tất cả các loại hồ sơ có thể. Giả sử chúng ta có một loại labeltất cả các nhãn có thể (trong thực tế nó có thể stringhoặc một số như vậy). Loại của tất cả các loại hồ sơ là

record ≡ label → option Type

Một phần tử R : recordlà ánh xạ từ nhãn đến các loại tùy chọn, trong đó R lblcó giá trị Nonenếu nhãn lblkhông xuất hiện Rvà giá trị Some Anếu nó xuất hiện và có loại A.

Nếu R : recordsau đó loại được decribed bởi Rlà loại sản phẩm

∏ (ℓ : label),
  match R ℓ with
  | Some A ⇒ A
  | None ⇒ unit
  end

Điều này có nghĩa là một bản ghi rloại Rlà một hàm phụ thuộc sẽ đưa nhãn thành một phần tử Anếu xuất hiện trong Rvà cho đơn vị khác.

Tuy nhiên, một mergehoạt động là có vấn đề, cũng như một mối quan hệ phụ R ≤ Q. Điều này là như vậy bởi vì chúng ta không thể diễn tả thực tế rằng một nhãn lblcó cùng loại trong bản ghi Rvà bản ghi Q. Tốt nhất bạn có thể nói rằng các loại là đẳng cấu, hoặc mệnh đề bằng nhau, nhưng đó không phải là những gì bạn muốn.

Chúng ta có thể định nghĩa một extendhoạt động

extend : record → record → record

trong đó đối số thứ nhất ghi đè lên đối số thứ hai để extend R Qcó các trường Rbổ sung các trường Qđó không xuất hiện trong R:

extend R Q ≡
   λ (ℓ : label),
     match Q ℓ with
     | Some A ⇒ Some A
     | None ⇒ Q ℓ
     end
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.