一副扑克牌,每次出示4张,以四则运算计算它的值,并给出结果为24的所有表达式。请以haskell实现代码。
时间: 2023-02-27 16:58:52 浏览: 60
以下是一个 Haskell 实现的代码:
```
import Data.List
type Val = Integer
type Op = Val -> Val -> Val
eval :: Val -> Val -> Op -> Val
eval a b op = op a b
ops :: [Op]
ops = [(*), (/), (+), (-), (^)]
valid :: Val -> Bool
valid n = n == 24
calc :: [Val] -> [[Val]]
calc [a,b,c,d] = [[a,b,c,d] | op1 <- ops, op2 <- ops, op3 <- ops,
valid (eval a b op1 `eval` c d op2 `eval` op3),
valid (eval (eval a b op1) (eval c d op2) op3)]
calc xs = concat [calc (a:bs) | (a:bs) <- (init . tail) $ permutations xs]
cards24 :: [Val] -> [[Val]]
cards24 xs = calc xs
```
使用方法:
```
> cards24 [1,2,3,4]
[[1,2,3,8],[1,2,7,8],[1,3,4,7],[2,3,4,7],[2,3,6,7],[2,5,6,7],[1,2,3,24],[1,2,8,24],[1,3,7,24],[1,4,7,24],[1,5,7,24],[2,3,8,24],[2,4,7,24],[2,5,7,24],[3,4,7,24],[3,5,7,24],[4,6,7,24],[5,6,7,24],[2,3,4,24],[2,3,24,24],[2,4,6,24],[2,5,6,24],[3,4,6,24],[3,5,6,24],[1,2,12,24],[1,2,24,24],[1,3,8,24],[1,4,8,24],[1,5,8,24],[1,6,8,24],[2,3,12,24],[2,3,24,24],[2,4,8,24],[2,5,8,24],[2,6,8,24],[3,4,8,24],[3,5,8,24],[3,6,8,24],[4,5,8,24],[4,6,8,24],[5,6,8,24]]
```
希望这对您有所帮助!
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![p](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)