Hãy tưởng tượng một ngôn ngữ lập trình chức năng chỉ có các kiểu dữ liệu là vô hướng số và các tổ hợp các mảng tùy ý. Ngôn ngữ thiếu bất kỳ phương tiện lặp lại không giới hạn, vì vậy những điều sau đây không được phép:
- vòng lặp rõ ràng (không sử dụng nhiều mà không có tác dụng phụ nào)
- đệ quy
- các hàm hạng nhất tùy ý (không có tổ hợp y)
Ngôn ngữ, tuy nhiên, có:
- chức năng cấp cao nhất
- phạm vi từ vựng cho phép ràng buộc
- dòng điều khiển phân nhánh
- các hàm toán học và logic vô hướng phổ biến
- một số hàm tạo mảng đơn giản như fill (n, x) tạo ra một mảng phần tử n với các giá trị x giống hệt nhau
- quan trọng nhất: một tập hợp hạn chế các toán tử bậc cao thực hiện phép lặp có cấu trúc song song (như ánh xạ, thu nhỏ, quét, tất cả các cặp).
Để cụ thể hơn về các toán tử song song dữ liệu:
- y = bản đồ (f, x) => y [i] = f [i]
- y = giảm (f, a, x) => y = f (a, f (y [p [0]], f (y [p [1]], ...))) cho một số hoán vị p
- y = quét (f, a, x) => y [i] = giảm (f, a, y [0 ... i-1])
- y = allpairs (f, x, y) => y [i, j] = f (x [i], y [j])
Chúng ta cũng có thể có các toán tử khác, nhưng để đủ điều kiện họ nên có thời gian chạy đa thức, có thể thực hiện được theo một số mô hình tính toán song song dữ liệu hợp lý và sử dụng ở hầu hết không gian đa thức.
Rõ ràng có một số cấu trúc không thể diễn tả bằng ngôn ngữ này, chẳng hạn như:
while f(x) > tol:
x <- update(x)
Chúng ta có thể thể hiện điều gì trong hệ thống này? Có phải chúng ta chỉ giới hạn trong các vấn đề tìm kiếm trong FP? Chúng ta có thể nắm bắt tất cả các thuật toán thời gian đa thức? Ngoài ra, có một số toán tử tối thiểu cho lớp này không?