2011-01-12 15 views
23

Từ phần 3.13.3 của curry tutorial:Loại hệ thống nào có thể ngăn chặn việc tạm ngưng mục tiêu bằng ngôn ngữ logic?


Operations rằng residuate được gọi là cứng nhắc, trong khi hoạt động mà thu hẹp được gọi là linh hoạt. Tất cả các hoạt động được xác định là linh hoạt trong khi hầu hết các hoạt động nguyên thủy, như hoạt động số học, là cứng nhắc vì việc đoán không phải là một lựa chọn hợp lý cho chúng. Ví dụ, khúc dạo đầu xác định một hoạt động danh sách nối như sau:

infixr 5 ++ 
... 
(++)    :: [a] -> [a] -> [a] 
[]  ++ ys = ys 
(x:xs) ++ ys  = x : xs ++ ys 

Kể từ khi hoạt động “++” là linh hoạt, chúng ta có thể sử dụng nó để tìm kiếm một danh sách thoả mãn một tính chất đặc biệt:

Prelude> x ++ [3,4] =:= [1,2,3,4]  where x free 
Free variables in goal: x 
Result: success 
Bindings: 
x=[1,2] ? 

Mặt khác, các phép toán số học được xác định trước như phần bổ sung “+” là cứng nhắc. Do đó, một cuộc gọi để “+” với một biến logic như là một cuộc tranh cãi Flounders:

Prelude> x + 2 =:= 4 where x free 
Free variables in goal: x 
*** Goal suspended! 

Curry không xuất hiện để bảo vệ chống lại các mục tiêu bằng văn bản rằng sẽ bị treo. Những loại hệ thống nào có thể phát hiện trước khi một mục tiêu có bị đình chỉ không?

+5

IMO, câu hỏi như vậy có thể được trả lời sớm hơn bởi các chuyên gia trong các hệ thống kiểu (có thể, tại http://cstheory.stackexchange.com) hoặc các chuyên gia Curry (trong danh sách gửi thư của họ). –

Trả lời

3

Bạn đã mô tả những âm thanh như kiểm tra chế độ, thường kiểm tra xem đầu ra nào sẽ có sẵn cho một bộ đầu vào nhất định. Bạn có thể muốn kiểm tra ngôn ngữ Mercury mà kiểm tra chế độ khá nghiêm túc.

Các vấn đề liên quan