2011-09-30 32 views
9

Tôi có một kiểu dữ liệu tiêu chuẩn đại diện cho các công thức của logic vị ngữ. Một chức năng đại diện cho một quy tắc loại trừ khấu trừ tự nhiên cho phân ly có thể trông giống như:Chức năng Trả về "Không có giải pháp" thay vì "Không có gì"

d_el p q = 
    if p =: (Dis r s) && q =: (Neg r) then Just s else 
    if q =: (Dis r s) && p =: (Neg r) then Just s else 
    Nothing where r,s free 

x =: y = (x =:= y) == success 

Thay vì đánh giá để có gì khi thống nhất đất nước không thành công, hàm trả về không có giải pháp trong PACKS:

logic> d_el (Dis Bot Top) (Not Bot) 
Result: Just Top 
More Solutions? [Y(es)/n(o)/a(ll)] n 
logic> d_el (Dis Bot Top) (Not Top) 
No more solutions. 

tôi đang thiếu gì, và tại sao không el đánh giá thành Nothing khi hợp nhất không thành công?

+1

Các ngôn ngữ tôi đang sử dụng là Curry, một lập trình langauge chức năng logic (xem thẻ). – danportin

+0

oh - Tôi xin lỗi .... vô minh có thể khá đáng lo ngại .... – Carsten

+2

Như bạn có thể biết, "cà ri" cũng là một thuật ngữ có ý nghĩa trong các ngôn ngữ khác (như Haskell, rõ ràng) vì vậy có lẽ bạn nên [ thêm một số nội dung vào trang wiki Stack Overflow cho thẻ 'curry' (http://stackoverflow.com/edit-tag-wiki/45806). – MatrixFrog

Trả lời

1

Dường như đây không phải là cách tốt nhất để sử dụng các ràng buộc về phương trình. Khi a =:= b thất bại thì mệnh đề hàm hoàn thành cũng không thành công.
ví dụ .:

xx x = if (x =:= 5) == success then 1 else x 
xx x = 3 

Đánh giá xx 7 kết quả trong 3 (không 7) vì 7 =:= 5 hoàn toàn chấm dứt khoản đầu tiên của xx chức năng.

Tôi nghĩ rằng mã nên trông như thế này:

d_el p q = case (p,q) of 
    (Dis a s, Neg b) -> if a == b then Just s else Nothing 
    (Neg a, Dis b s) -> if a == b then Just s else Nothing 
    _ -> Nothing 
Các vấn đề liên quan