我正在使用Haskell中的SBV Solver,特別是我正在使用Rational型別的變數。
我想解決線性問題,例如:
solution1 = do
[x] <- sRationals ["x"]
遏制 $ 5.%1.<= x
這段代碼作業起來沒有問題,我的問題是當我想解決5 <= 4型別的 "瑣碎 "情況時 如果它對整數有效,我就沒有問題了,我可以使用下面的代碼;
solution2 = do
xs <- sIntegers [] 。
約束$ (5 :: SInteger) .<= (5 :: SInteger)
這段代碼作業起來沒有問題
如果我嘗試使用與Rationals等價的代碼:solution3 = do
xs <- sRationals [] 。
約束$ (5.%1:: SRational) .<= (5.%1:: SRational)
解決方案3不起作用,它回傳
。*** Exception: SBV.liftCV2: 不可能,收到不兼容的args: (5 % 1 :: Rational,5 % 1 :: Rational)
CallStack(來自HasCallStack)。
錯誤,在./Data/SBV/Core/Concrete呼叫。 HS:337:74 in SBV-8。 15-6kqa1q33xxwHQg8FGWAWlC:Data.SBV.Core.Concrete。
我可以引入一個虛擬變數。
我可以引入一個虛擬變數。
solution = do
[dummy] <- sRationals ["dummy"] 。
約束$ dummy .==0.%1
constrain $ (5.%1:: SRational) .<= (5.%1:: SRational) 啞巴
這也可以,但我想知道是否可以不引入這個變數。
當然,我可以在沒有SBV求解器的情況下解決這個問題,但在這個問題出現的背景下,我更容易從求解器中解決這個問題
。提前感謝,對我的英語感到抱歉,我使用了谷歌翻譯來幫助我
。uj5u.com熱心網友回復:
這似乎是一個bug,我認為SBV的作者在這個模式匹配中忘記了CRational:
我開了一個問題。https://github.com/LeventErkok/sbv/issues/591
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/316933.html
標籤:
