Từ nào cho một hoạt động có thể được áp dụng nhiều lần và không bao giờ thay đổi trạng thái ngoài ứng dụng ban đầu?


38

Tôi đang cố nhớ một từ, tôi nghĩ nó liên quan đến lý thuyết tính toán hoặc cơ sở dữ liệu. Từ đồng nghĩa gần nhất là atomicnhưng đó không phải là chính xác. Về cơ bản, đây là một loại tính toán sẽ tạo ra kết quả tương tự ngay cả khi chạy nhiều lần liên tiếp, nghĩa là nó không tạo ra tác dụng phụ cho chính nó.

Tôi đặc biệt chạy qua từ này trong câu trả lời Stack Overflow về lệnh chmod (hoặc một số thao tác liên quan đến quyền khác).

Hy vọng rằng đó là đủ để tiếp tục. Chọc qua Wikipedia không giúp được gì nhiều.


5
Sẽ hợp lý khi chỉ định liệu bạn có chuyển cùng một đầu vào cho mỗi lệnh gọi hoạt động hay chạy mọi thao tác tiếp theo trên kết quả của cuộc gọi trước đó.
maxim1000

3
@ maxim1000 Đồng ý. Đánh giá bằng nhiều câu trả lời khác nhau, không ai chắc chắn OP có ý gì.
ford

Vấn đề ở đây là câu hỏi trong chủ đề không hoàn toàn giống với câu hỏi trong cơ thể. Tôi đã trả lời câu hỏi trong chủ đề này, nhưng bây giờ nhìn lại, tôi khá chắc chắn đó không phải là điều mà người đăng muốn. Chỉnh sửa câu hỏi, xóa câu trả lời
pdr

Bạn đang hỏi về một cái gì đó giống như một yêu cầu GET (trong đó kết quả tương tự được trả về mỗi lần không có vấn đề gì), hoặc bạn đang hỏi về một cái gì đó như toán tử gán (có tác dụng, nhưng lặp lại cùng một nhiệm vụ không thay đổi gì cả )?
Izkata

Câu trả lời:


91

Bạn có thể nghĩ về " Idempotent ".

Idempotence là tài sản của các hoạt động nhất định trong toán học và khoa học máy tính, chúng có thể được áp dụng nhiều lần mà không thay đổi kết quả ngoài ứng dụng ban đầu.


16
Về cơ bản, flà IFF f(f(x)) == f(x)FORALL bình thường x.
Jörg W Mittag

1
Giới hạn thú vị của mô tả - Phần thảo luận của trang được liên kết thảo luận về các nút Thang máy .. Phải có 1000 hành vi có thể được mô tả là "Idempotent" không liên quan đến Math hoặc Comp Sci.
mattnz

Theo hiểu biết của tôi về câu hỏi, đó hoàn toàn không phải là những gì OP đang hỏi, vì anh ta không nói đến việc áp dụng thuật toán trên kết quả của lần lặp đầu tiên, mà áp dụng lại nó trên cùng một dữ liệu nguồn. Một cái gì đó giống như nếu x = y, thì F (x) = F (y)
Joubarc

2
@Joubarc có idempotent có một ý nghĩa hơi lỏng lẻo trong điện toán sau đó là phần còn lại của toán học, do đó nó là chính xác. vi.wikipedia.org/wiki/Idempotent#Computer_science_meaning
jk.

1
@Joubarc Điều đó chỉ có nghĩa là nó là một chức năng. Các hoạt động trên cùng một đầu vào có thể hoạt động khác nhau không thể được gọi là các hàm theo quan điểm toán học. Nếu trong lập trình chúng được gọi là các hàm, thì các hàm thực tế luôn cung cấp cùng một đầu ra cho cùng một đầu vào được gọi là các purehàm ... Chà, thật ra, chúng cũng không có bất kỳ tác dụng phụ nào cả.
Paul Stelian

12

Từ chung là Idempotence áp dụng cho cả máy tính và toán học. Nó không giống với Reentrant mà nó thường bị nhầm lẫn. Idempotence chính xác là những gì bạn mô tả, Reentrant về cơ bản là gián đoạn với khả năng nhận chính xác nơi bạn rời đi.

Các ngôn ngữ chức năng thuần túy như Haskell được xây dựng dựa trên nguyên tắc càng gần với Idempotent càng tốt. Ba chữ cái đầu tiên của từ viết tắt ACID trong Lý thuyết cơ sở dữ liệu là Idempotence như được áp dụng cho Cơ sở dữ liệu.


10

Bạn có thể đang tìm kiếm một chức năng thuần túy .

Như được định nghĩa trong liên kết, hai điều kiện làm cho một hàm thuần túy:

  1. Hàm luôn đánh giá cùng một giá trị kết quả được đưa ra cùng (các) giá trị đối số.
  2. Đánh giá kết quả không gây ra bất kỳ tác dụng phụ hoặc đầu ra có thể quan sát được về mặt ngữ nghĩa, chẳng hạn như đột biến của các đối tượng có thể thay đổi hoặc đầu ra cho các thiết bị I / O.

4
Độ tinh khiết vượt xa sự bình thường đơn giản: một chức năng thuần túy hoàn toàn không thể có bất kỳ tác dụng phụ nào, trong khi đó, một người bình thường có thể có tác dụng phụ miễn là chúng không gây ra các lần chạy tiếp theo để làm những việc khác nhau. Ví dụ, một hàm sử dụng các biến có thể thay đổi cục bộ không thuần túy, nhưng nó có thể là idempotent. Bạn thậm chí có thể viết một hàm sử dụng các biến toàn cục và vẫn còn trống, miễn là bạn đảm bảo rằng nó bảo vệ các toàn cục đó để làm cho nó trở lại.
tdammers

3
@tdammers Độ tinh khiết và tính không thay đổi là hoàn toàn trực giao: một hàm thuần túy không phải là idempotent và ngược lại. Ví dụ, f(x) := x + 1là thuần túy nhưng chắc chắn không phải là idempotent.
Konrad Rudolph


0

Một khả năng khác là xác định .

Trong khoa học máy tính, thuật toán xác định là một thuật toán, với một đầu vào cụ thể, sẽ luôn tạo ra cùng một đầu ra, với máy bên dưới luôn đi qua cùng một chuỗi trạng thái.


1
điều này đã được xóa chỉ trong câu trả lời trước; Nhận xét đã thách thức ý tưởng này là: "Điều này là sai. Ví dụ, thuật toán hoán đổi hai giá trị là hoàn toàn xác định nhưng chạy hai lần sẽ không tạo ra kết quả giống như chạy một lần."
gnat

2
Không rõ liệu câu trả lời này có trả lời câu hỏi ban đầu hay không, bởi vì câu hỏi ban đầu không được đặt câu rất hay, nhưng tôi đã bỏ phiếu trả lời vì câu trả lời có thể là câu mà ai đó đang tìm kiếm khi họ kết thúc đây.
Richard Whitehead

Nếu bạn thay đổi các giá trị đầu vào trước lần chạy tiếp theo, làm thế nào bạn có thể tuyên bố rằng bạn cung cấp thường trình với cùng các giá trị đối số chính xác ..?
Hein Haraldson Berg
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.