【问题标题】:What's wrong with my logic?我的逻辑有什么问题?
【发布时间】:2011-11-10 14:29:31
【问题描述】:
>main :: IO ()
 main = withPostgresqlConn "host=localhost user=Rocko port=5432 dbname=Rocko" $           runSqlConn $ do
   runMigration migrateAll
   let compDay = C.fromGregorian 2011 11 21
   match <- selectList
              [TestStartDate ==. compDay,
               TestEstimatedEnd ==. compDay,
               TestStatus /<-. [Passed,Failed]] []
   scheduled <- selectList [TestStatus ==. Scheduled] []
--   liftIO $ print scheduled
   liftIO $ print match
   if (L.null match == True) then (liftIO $ print "date available!!!! ") else (liftIO $       print "date not available")
   return ()

我正在尝试确定特定日期是否符合此条件:不等于 TestStartDate、不等于 TestEstimatedEnd,并且 Passed 和 Failed 都不是 TestStatus 的成员。

但是,我想证明我选择的日期(应该与 TestEstimatedEnd 匹配)未能做正确的事情。它应该说 :date 不可用。那么我的逻辑有什么问题呢?

> id |         firmware          |  version   | startDate  | estimatedEnd |  status

>----+---------------------------+------------+------------+--------------+-----------
  >1 | BCC Admin                 | 0.0.00.001 | 2011-11-19 | 2011-11-21   | Scheduled

>ghcifoo> main
 "date available!!!! "

【问题讨论】:

  • 澄清一下:当没有匹配的日期时,是否应该说日期可用?
  • 是的,这就是我想要做的。
  • selectList 中的条件是合取(&&)还是析取(||)?
  • selectList 中的条件是合取的。
  • 那么您正在检查具有相同开始和(估计)结束日期的东西,但这些工作通常需要几天,所以不匹配。

标签: haskell persistent yesod


【解决方案1】:

这是一个难以复制的问题,所以我写的是一个非常疯狂的猜测,但这里是:

让我们从最终结果倒推

if (L.null match == True) then (liftIO $ print "date available!!!! ") else (liftIO $       print "date not available")

这一行清楚地评估了then 条件。尔格(L.null match == True)True。我的第一个问题是为什么== True 子句? L.null match 本身应该也能正常工作。

现在我们知道L.null match 一定是True,但上面的行似乎表明match 包含一条记录。因此,在这一点上,我怀疑L.null 可能不是您认为的功能,或者匹配不包含输出导致我们相信的功能。我的下一个调试建议是针对其他一些属性测试match(可能有长度函数吗?),看看问题出在L.null 还是match。另一个想法是将打印语句移到if 之后。这不应该改变任何东西(在 Haskell 中肯定不会!),但是来自数据库查询的响应偶尔奇怪。 (例如,不是一个列表,而是一个 stream 在使用时被消耗的结果。)

祝你好运!

【讨论】:

  • 您好,感谢您提供故障排除提示。我不知道如何追根究底。
猜你喜欢
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
相关资源
最近更新 更多