- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
module Algorithm where
import System.Random
import Data.Maybe
import Data.List
type Atom = String
type Literal = (Bool,Atom)
type Clause = [Literal]
type Formula = [Clause]
type Model = [(Atom, Bool)]
type Node = (Formula, ([Atom], Model))
-- This function takess a Clause and return the set of Atoms of that Clause.
atomsClause :: Clause -> [Atom]
-- This function takes a Formula returns the set of Atoms of a Formula
atoms :: Formula -> [Atom]
-- This function returns True if the given Literal can be found within
-- the Clause.
isLiteral :: Literal -> Clause -> Bool
-- this function takes a Model and an Atom and flip the truthvalue of
-- the atom in the model
flipSymbol :: Model -> Atom -> Model -- is this ok?
Additional functions :
remove :: (Eq a) )a ->[a] ->[a]
-This function removes an item from a list.
neg :: Literal->Literal
-This function flips a literal (ie. from P to :P and from :P to P).
falseClause :: Model -> Clause -> Bool
-This function takes a Model and a Clause and returns True
if the clause is unsatisfied by the model or False otherwise.
falseClauses :: Formula -> Model -> [Clause]
-This function takes a Formula and a Model and returns the list of clauses of the formula that are not satisfied.
assignModel :: Model -> Formula -> Formula
-This function applies the assign function for all the assignments of a given model.
checkFormula :: Formula -> Maybe Bool This function checks whether a formula can be decided to be satisfiable or unsatisfiable based on the effects of the assign function.
satisfies :: Model -> Formula -. Bool This function checks whether a model satisfies a formula. This is done with the combination of the assignModel and checkFormula functions.
1 Câu trả lời
从一个地方开始:看看
removeTautologies :: Formula -> Formula
现在假设我们可以编写一个函数
isTautology :: Clause -> Bool
然后我们可能有机会使用该函数来过滤一般公式。所以我会尝试忽略除了函数 isTautology 之外的所有内容。本质上,这里的问题是:什么是同义反复cũng như我们如何检测它?Edward Z. Yang 发表的一些想法绝对可以帮助您理解什么是同义反复正在进行中。在这种情况下,我们可以查看子句 [(True,"A"), (True,"B"), (False,"A")]
并尝试将其提供给 isTautology
用于测试它。与爱德华发布的其他子句类似,[(True,"B"), (True,"C"), (True,"A")]
.
一般的技巧是弄清楚如何将函数分解为更小的易于编写的组成部分,然后将这些单独的部分与代码粘合在一起以解决最终问题。我们正在将适用于一般公式的 removeTautologies
分解为可适用于公式中子句的帮助器 isTautology
,然后我们寻求定义 removeTautologies
通过一些过滤粘合代码来实现。
我希望这可以帮助您开始解决您的问题。它可能看起来完全无关紧要,但请注意,模型检查算法中使用了更高级的变体,这些算法验证您的 CPU 是否正确、协议(protocol)行为,并且最近也已用于自动重构,请参阅 http://coccinelle.lip6.fr/供使用。所以这个问题是学习现实世界中一些严肃的适用性的好方法!
<小时>我会在这里编辑它以帮助您,而不是在评论部分回复。您写道:
rt ((x, x') : (y, y') : rest) | x' == y' = rt rest
| otherwise = (x, x') : rt ((y, y') : rest)
正如您提到的,这种方法存在一些问题。首先,游戏是您的 rt 函数正在处理子句。如果给定的子句是重言式,则应将其删除,因此最好使用我上面提到的类型将其称为 isTautology
,或者简单地:
isRemovableClause :: Clause -> Bool
您所采取的路径要求您按字典顺序对子句中的列表进行排序,然后考虑在有 [P, P, not P, Q]
的情况下该怎么做。另一种方法是建立搜索。假设我们有
isRemovableClause ((tv, name) : rest) = ...
请注意,如果 rest
中存在值(not tv, name)
,则此子句必须是同义反复。否则,我们可以丢弃(tv, name)
và trongrest
中寻找同义反复。
将焦点移至 removeTautologies
,很明显可以使用 isRemovableClause
来编写该函数:公式是子句列表,因此我们可以简单地遍历子句列表并删除所有 isRemovableClause
返回 true 的子句。粗体求解器将使用 List.filter
(一个高阶函数)来实现此目的。
关于 haskell 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4877486/
Tôi mới học C và tôi đã viết chương trình C này cho phép người dùng nhập ngày trong năm và ngược lại chương trình sẽ xuất ra tháng và ngày trong tháng. Chương trình hoạt động tốt, nhưng bây giờ tôi muốn đơn giản hóa chương trình. Tôi biết là tôi cần một vòng lặp nhưng tôi không biết phải làm thế nào. Đây là chương trình
Tôi đang cố gắng tìm ra lỗi trong mã của mình. Ý tưởng là tạo ra một chương trình vẽ nhỏ, với các nút màu đỏ, xanh lá cây, xanh lam và trong suốt. Tôi đã nghĩ ra mọi cách để khiến nó hoạt động nhưng vẫn không thể tìm ra lỗi trong mã. Chương trình mở ra rồi đóng lại ngay lập tức. nhập khẩu ja
Tôi muốn cài đặt màn hình, nhưng tôi phải làm gì tiếp theo? $ brew tìm kiếm màn hình imgur-screenshot màn hình
Tôi có một ứng dụng socket UDP hoạt động ở phía máy chủ. Để kiểm tra phía máy chủ, tôi đã viết một chương trình máy khách python đơn giản để gửi tin nhắn "xin chào thế giới, bạn khỏe không". Sau đó máy chủ sẽ nhận được tin nhắn và
Tôi có một tập lệnh shell chạy chương trình Python để xử lý trước một số dữ liệu, sau đó chạy chương trình R để thực hiện một số tác vụ chạy lâu. Tôi đang học cách sử dụng Docker và tôi đã chạy FROM r-base:l
Trong Linux. Tôi có một chương trình C đọc một tệp văn bản có kích thước 2048 byte làm đầu vào. Tôi muốn khởi chạy một chương trình C từ một tập lệnh Python. Tôi muốn tập lệnh Python truyền một chuỗi văn bản làm đối số cho chương trình C thay vì
Gần đây tôi bắt đầu sắp xếp các bản nháp trong ghi chú của mình. Bài viết này được tạo vào tháng 5 năm 2023 (vì nó được chuyển sang OneDrive ở giữa, có thể còn lâu hơn thế nữa). Đây là một tình huống phổ biến để gọi các chương trình máy tính từ web, chẳng hạn như tải xuống từ Baidu Netdisk, tham gia nhóm QQ, v.v.
Trong một lớp học, tôi được yêu cầu viết một chương trình VHDL sử dụng hai số nguyên đầu vào là A và B, rồi thay thế A bằng A+B và B bằng AB. Tôi đã viết chương trình và testbench sau đây. Nó thực hiện việc triển khai và kiểm tra cú pháp hành vi, nhưng không mô phỏng. Tất cả
mô-đun Thuật toán nơi nhập System.Random nhập Data.Maybe nhập Data.List loại Atom = String loại
Tôi muốn tìm bội chung nhỏ nhất của nhiều hơn hai số Chương trình C++ để tìm bội chung nhỏ nhất của một số N cho trước Câu trả lời hay nhất int lcm(int a, int b) { return (a/gcd(a,b))*b; } Đối với gcd, hãy xem
Chương trình này có lỗi. Có ai giải được bài này không? Lỗi là: TempRecord đã định nghĩa một thành viên có tên là 'this' với cùng các tham số
Khi tôi chạy chương trình sau, tôi nhận được các giá trị rác trong str1 và str2. Vì vậy #include #include #include sử dụng không gian tên std; int main() {
Đây là bài tập về nhà của tôi: Một cặp thỏ mới sinh (một đực và một cái) được đặt trên một cánh đồng. Thỏ có thể giao phối khi được một tháng tuổi, vì vậy vào cuối tháng thứ hai, mỗi cặp thỏ sẽ sinh ra hai cặp thỏ mới rồi chết đi. Lưu ý: Trong tháng 0, có 0 cặp thỏ. Vào tháng đầu tiên, có một cặp thỏ
Tôi đã viết một chương trình để chuyển đổi chuỗi thập phân sang thập lục phân bằng cách sử dụng lệnh switch cho các chữ cái, nhưng chương trình không hoạt động bình thường nếu tôi sử dụng char! Nếu không có lệnh switch, tôi không thể xử lý các số trên 9. Tôi hy vọng bạn có thể hiểu tôi vì tôi
Tôi mới làm quen với C++ (mặc dù tôi có một số kinh nghiệm với C) và MySQL, và tôi đang cố gắng tạo một chương trình đọc cơ sở dữ liệu từ MySQL, tôi đã làm theo hướng dẫn này nhưng tôi gặp lỗi khi cố gắng "xây dựng" giải pháp. (Tôi đang sử dụng
Tôi vẫn là người mới bắt đầu và đang cố gắng sử dụng một số chức năng cơ bản trong Swift. Có ai có thể cho tôi biết lỗi trong đoạn mã này không? nhập UIKit var guessInt: Int var randomNum = arc
Tôi đang viết một hàm trong C++11 sử dụng biểu thức có dạng constant1 + constant2 và kết hợp chúng lại với nhau. constant1 và constant2 được lưu trữ trong std::string,
Tôi đã viết đoạn mã này bằng C++ để cộng và nhân 2 ma trận bằng cách sử dụng toán tử quá tải. Khi tôi thực thi mã, nó tạo ra lỗi ở dòng 57 và 59, thao tác cấu trúc không hợp lệ (lỗi giống nhau ở cả hai dòng). Xin hãy giải thích lỗi của tôi. Cảm ơn trước:
Tôi là người mới bắt đầu học C++ và muốn viết một chương trình đơn giản để hoán đổi hai ký tự trong một chuỗi. Ví dụ; chúng ta nhập chuỗi này: "EXAMPLE", và hoán đổi hai ký tự này: "E" và "A", kết quả đầu ra sẽ tương tự như "AXEMPLA". Tôi ở đây
Tôi cần trợ giúp với đoạn mã sau: Khai báo 3 biến kiểu double, mỗi biến đại diện cho một trong ba cạnh của một tam giác. Yêu cầu người dùng nhập giá trị cho cạnh đầu tiên, sau đó thiết lập dữ liệu đầu vào của người dùng thành biến bạn đã tạo để biểu diễn cạnh đầu tiên của tam giác. Hai bước cuối cùng
Tôi là một lập trình viên xuất sắc, rất giỏi!