gpt4 book ai didi

haskell - 为什么这个函数中有一个非穷举模式?

转载 作者:行者123 更新时间:2023-12-01 19:13:53 25 4
gpt4 key购买 nike

在此脚本中,

permutations :: Integer -> Integer -> Integer
permutations x y
| x==x-(y-1) = x
| (x>0) && (y>0) = permutations (x-1) y * x

我想知道为什么函数排列中有非穷举模式。

请帮助我。

非常感谢您的提前!

最佳答案

您尚未指定处理一个或两个参数为负数的情况的逻辑是什么。然而,您的函数很乐意允许将负参数传递给它,这就是您收到错误的原因。要解决此问题,您可以添加一个包罗万象的 otherwise语句末尾包含所需的错误处理逻辑,如下所示:

permutations :: Integer -> Integer -> Integer
permutations x y
| y == 1 || x == y = x
| (x>0) && (y>0) = permutations (x-1) y * x
| otherwise = error "invalid input"

请注意,我在第一种情况下添加了一个条件 - 您不应该能够计算排列 x < y ,所以基本情况应该是 y = 1x == y .

Demo

确实给出正确答案的替代解决方案如下:

import Data.List(foldl')

permutations :: Integer -> Integer -> Integer
permutations x y = if any (<=0) [x,y] then 0 else foldl' (*) 1 [x+1-y..x]

关于haskell - 为什么这个函数中有一个非穷举模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27715771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com