object Prop {
def simplify(prop : Prop) : Prop = {
prop match {
case Not(Or(a,b)) => simplify(And(Not(a),Not(b)))
case Not(And(a,b)) => simplify(Or(Not(a),Not(b)))
case Not(Not(a)) => simplify(a)
case _ => {
if (simplify(prop) == prop) prop
else prop
}
}
}
}
Tôi chắc chắn tôi đã có vòng lặp vô hạn do trường hợp 'mặc định' của tôi gây ra. Tôi đang sử dụng đệ quy trong mọi trường hợp. Đó là có nghĩa là, nhưng, chỉ khi Prop có thể được đơn giản hóa. Ngay khi Prop không thể được đơn giản hóa, nó sẽ trả về toàn bộ.Đoạn mã scala vòng lặp vô hạn
Tôi không thấy cách tôi có thể kiểm tra để đơn giản hơn nữa. (Tôi không được phép sử dụng các thư viện khác, như được đề xuất trong kênh freenodes #scala).
Ai đó có thể giải thích cho dù đó là 'trường hợp _' gây ra vòng lặp và cách giải quyết nó? Làm thế nào tôi có thể thử nghiệm để đơn giản hóa có thể mà không cần thực hiện một vòng lặp?
Cảm ơn trước!
Tôi hiểu ý của bạn. Mặc dù, nhiệm vụ của tôi cho tôi biết rõ ràng để sử dụng một đối tượng đồng hành. Prop.simplify (Prop): Prop trả về một mệnh đề đơn giản và tương đương bằng cách liên tục áp dụng định luật de Morgan và phép nhân đôi phủ định đối số với mệnh đề đối số. Đề xuất kết quả phải đáp ứng các yêu cầu được nêu bên dưới. (chúng tôi có một hệ thống để chạy công việc của chúng tôi chống lại một thử nghiệm) Xem: http://pastebin.com/WDuQKreD (cũng cho cá tuyết đầy đủ e tại thời điểm này) Cảm ơn anyway! – Sander
@Sander: Bạn chỉ cần thêm trường hợp để 'đơn giản hóa' cho các hoạt động khác (ngoài ra, tôi xin lỗi vì tôi không hiểu rằng đây là bài tập về nhà — tôi sẽ không trực tiếp trả lời như vậy). –
@Sander: Ngoài ra, cả hai kế thừa từ một trường hợp lớp và có một trường hợp lớp với một constructor trống là hình thức xấu. 'đặc điểm Prop; đối tượng trường hợp Đúng mở rộng Prop' là tốt hơn. –