Có sự khác biệt giữa


11

Tôi hiện đang học tính toán lambda và đã tự hỏi về hai loại khác nhau sau đây viết một thuật ngữ lambda.

  1. λxy.xy
  2. λx.λy.xy

Có sự khác biệt nào về ý nghĩa hay cách bạn áp dụng giảm beta, hay đó chỉ là hai cách để thể hiện cùng một điều?

Đặc biệt định nghĩa về tạo cặp này khiến tôi tự hỏi:

cặp = λxy.λp.pxy

Câu trả lời:


15

Đây chỉ là sự khác biệt của các ký hiệu. là viết tắt của . Không có phép thuật ở đây.λ x . λ y . λ z . tλxyz.tλx.λy.λz.t

Thật vậy, nhưng bạn có xu hướng nhấn mạnh rằng là một hàm bằng cách thay đổi cách bạn viết định nghĩa. Nhưng nó thực sự là như vậy.cặp p x ypair=λxyp.pxyλ p . p t upairtuλp.ptu


17

Đầu tiên là viết tắt cho thứ hai. Đó là một quy ước cú pháp phổ biến để rút ngắn các biểu thức.

Mặt khác, nếu bạn có bộ dữ liệu trong ngôn ngữ, thì có một sự khác biệt giữa

  1. λx.λy.xy
  2. λ(x,y).xy .

Trong trường hợp trước tôi có thể cung cấp một đối số duy nhất cho hàm và truyền hàm kết quả xung quanh cho các hàm khác. Trong trường hợp sau, cả hai đối số phải được cung cấp cùng một lúc. Tất nhiên, có một chức năng có thể được áp dụng để chuyển đổi 1 thành 2 và ngược lại. Quá trình này được gọi là (un) currying .

Định nghĩa của mà bạn đề cập là một mã hóa khái niệm các cặp thành -calculus, chứ không phải là các cặp như một kiểu dữ liệu nguyên thủy (như tôi đã gợi ý ở trên).λpairλ


2

Việc chuyển đổi một hàm có nhiều đối số thành một chuỗi các hàm với các đối số duy nhất được gọi là currying . Hai chức năng cơ bản là giống nhau.

Wikipedia bài viết về cà ri


8
λxy.xyλx.λy.xy
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.