在数据库中更新/添加事实的最佳方法?

石头

说我有这样的事实:

fact(abc,2).

我想要这样的东西(伪代码):

fact_update(Functor,Name,AddToValue) :- 
  if Fact_exist then update_fact : NewVal is CurrentValue + AddToValue
  else create_new_fact : Functor(Name,AddToValue)

我尝试了2种不同的方式。首先,我不太喜欢:

 fact_add(Functor,Name,Val) :-
    Fact =.. [Functor, Name, Val],
    assert(Fact),
    say([fact, Fact]).
 fact_update(true, Functor,Name,Val) :-
    Fact =.. [Functor, Name, Amt],
    Fact,
    retractall(Fact),
    X is Amt + Val,
    fact_add(Functor,Name,X). %% retractall??
 fact_update(false,Functor,Name,Val) :-
    fact_add(Functor,Name,Val).

第二个不起作用:

fact_update(Functor,Name,Val) :-
   Fact =.. [Functor, Name, Amt],
   (
      Fact -> retractall(Fact)
   ;
      (
         (nonvar(Amt) -> NewAmt is Amt + Val ; NewAmt is Val),
         Fact =.. [Functor, Name, NewAmt],
         assert(Fact)
      )
   ),
   say([upd_fact, Fact]).

因为什么时候Fact不成功Amt没有被实例化,所以我总是得到NewAmt is Val

头发C.

我会写

fact_update(Functor,Name,AddToValue) :- 
  Curr =.. [Functor,Name,CurrVal],
  (   retract(Curr)
  ->  NextVal is CurrVal+AddToValue,
      Next =.. [Functor,Name,NextVal]
  ;   Next =.. [Functor,Name,AddToValue]
  ),
  assertz(Next).

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在数据库中更新/添加事实的最佳方法?

来自分类Dev

在数据库中添加数据的最佳技术

来自分类Dev

在数据库中添加数据的最佳技术

来自分类Dev

避免在数据库中添加重复项的最佳方法

来自分类Dev

在数据库中存储多个枚举的最佳方法

来自分类Dev

在数据库中存储嵌套信息的最佳方法

来自分类Dev

在数据库中存储日期的最佳方法

来自分类Dev

在数据库中插入条目的最佳方法

来自分类Dev

使用SQL查询在数据库中创建新条目时添加(最新添加的ID + 1)

来自分类Dev

在php中添加数据库的最佳multiInsert方法?

来自分类Dev

在数据库中添加NULL

来自分类Dev

在数据库中存储数据的最佳方式

来自分类Dev

使用ajax / JSON / php在数据库中插入记录后输出数据的最佳方法

来自分类Dev

在数据库中组织每日用户数据的最佳方法是什么?

来自分类Dev

来自数据库的实体框架更新模型未为tt类中的新添加表生成cs类

来自分类Dev

将数组存储在数据库中并将其作为数组从数据库取回的最佳方法

来自分类Dev

在数据库中保存多个图像的最佳方法

来自分类Dev

在数据库中插入多个值的最佳方法-PHP MySQL

来自分类Dev

在LINQ to SQL中将图像存储在数据库中的最佳方法

来自分类Dev

将连接字符串保存在数据库中的最佳方法是什么?

来自分类Dev

在数据库中存储一对多列的最佳方法

来自分类Dev

在数据库中的表之间维护共享字段的最佳方法是什么?

来自分类Dev

在数据库表中存储宾果卡号码的最佳方法是什么

来自分类Dev

在数据库中存储语言的最佳实践

来自分类Dev

在数据库中设置选定行的最佳实践

来自分类Dev

Nhibernate-删除并重新添加集合中的同一项目-Nhibernate是否在数据库中删除并读取?

来自分类Dev

在数据库更新后立即更新UI的最佳方法是什么(ASP.NET&JQuery)

来自分类Dev

在数据库更新后立即更新UI的最佳方法是什么(ASP.NET&JQuery)

来自分类Dev

数据库设计中的最佳方法

Related 相关文章

  1. 1

    在数据库中更新/添加事实的最佳方法?

  2. 2

    在数据库中添加数据的最佳技术

  3. 3

    在数据库中添加数据的最佳技术

  4. 4

    避免在数据库中添加重复项的最佳方法

  5. 5

    在数据库中存储多个枚举的最佳方法

  6. 6

    在数据库中存储嵌套信息的最佳方法

  7. 7

    在数据库中存储日期的最佳方法

  8. 8

    在数据库中插入条目的最佳方法

  9. 9

    使用SQL查询在数据库中创建新条目时添加(最新添加的ID + 1)

  10. 10

    在php中添加数据库的最佳multiInsert方法?

  11. 11

    在数据库中添加NULL

  12. 12

    在数据库中存储数据的最佳方式

  13. 13

    使用ajax / JSON / php在数据库中插入记录后输出数据的最佳方法

  14. 14

    在数据库中组织每日用户数据的最佳方法是什么?

  15. 15

    来自数据库的实体框架更新模型未为tt类中的新添加表生成cs类

  16. 16

    将数组存储在数据库中并将其作为数组从数据库取回的最佳方法

  17. 17

    在数据库中保存多个图像的最佳方法

  18. 18

    在数据库中插入多个值的最佳方法-PHP MySQL

  19. 19

    在LINQ to SQL中将图像存储在数据库中的最佳方法

  20. 20

    将连接字符串保存在数据库中的最佳方法是什么?

  21. 21

    在数据库中存储一对多列的最佳方法

  22. 22

    在数据库中的表之间维护共享字段的最佳方法是什么?

  23. 23

    在数据库表中存储宾果卡号码的最佳方法是什么

  24. 24

    在数据库中存储语言的最佳实践

  25. 25

    在数据库中设置选定行的最佳实践

  26. 26

    Nhibernate-删除并重新添加集合中的同一项目-Nhibernate是否在数据库中删除并读取?

  27. 27

    在数据库更新后立即更新UI的最佳方法是什么(ASP.NET&JQuery)

  28. 28

    在数据库更新后立即更新UI的最佳方法是什么(ASP.NET&JQuery)

  29. 29

    数据库设计中的最佳方法

热门标签

归档