Tôi đang cố gắng tạo một bảng chân lý cho một biểu thức boolean đã cho. Tôi có thể làm điều này với việc tạo một BoolExpr Datatype mới, nhưng tôi muốn làm điều đó với một hàm ẩn danh. Đó là nghĩa vụ phải làm việc như thế này:Bảng chân lý từ các hàm ẩn danh trong Haskell
> tTable (\x y -> not (x || y))
output:
F F | T
F T | F
T F | F
T T | F
cách tiếp cận của tôi:
tbl p = [(uncurry p) tuple | tuple <- allval]
where allval=[(x,y) | x <- [False,True], y <- [False,True]]
này hoạt động, nhưng chỉ cho 2 Arguments. Tôi muốn làm điều đó cho bất kỳ số lượng các đối số. Vì vậy, tôi figured tôi sẽ thực hiện một chức năng mà sẽ đưa các luận cứ từ một danh sách:
argsFromList f [] = f
argsFromList f (x:xs) = argsFromList (f x) xs
này không hoạt động:
Occurs check: cannot construct the infinite type: t = t1 -> t
Expected type: t -> [t1] -> t1 -> t
Inferred type: (t1 -> t) -> [t1] -> t1 -> t
In the expression: argsFromList (f x) xs
Tôi không hiểu những gì vấn đề là ở đây. Tôi sẽ rất biết ơn nếu có ai có thể chỉ cho tôi đi đúng hướng hoặc đăng một liên kết.
bản sao có thể có của [Tại sao định nghĩa chức năng như vậy không được phép trong haskell?] (Http://stackoverflow.com/questions/6168880/why-is-such-a-function-definition-not-allowed-in- haskell) –
Lưu ý rằng bạn có thể định nghĩa lambda là '(\ [x, y] -> không (x || y))', nó tự động cung cấp cho bạn hành vi của một hàm "với nhiều đối số tùy ý cùng loại ". – leftaroundabout