【问题标题】:Weight of marbles in a bag一袋弹珠的重量
【发布时间】:2015-12-01 17:33:54
【问题描述】:

所以我们刚开始学习 prolog,我很难理解 prolog。我们有这个家庭作业问题,我只是不知道从哪里开始。

定义一个规则weight(R, O, Y, G, B),求出每个包里可以装多少个每种颜色的弹珠,其中R, O, Y, GB分别是红、橙、黄、绿、蓝弹珠的数量.弹珠的重量分别为1, 2, 3, 4, 5 克。假设袋子的大小足以容纳总重量为30 克的所有弹珠。

【问题讨论】:

    标签: prolog logic


    【解决方案1】:

    如果你打算只用(比如说)黄色弹珠来解决这个问题,它可能看起来像这样:

    weight(Marbles, Weight) :- Weight #= Marbles * 3.
    

    如果你想看看你有多少黄色弹珠,你可以像这样查询 Prolog:

    ?- weight(Marbles, 30).
    Marbles = 10.
    

    你能从这里概括一下吗? :)

    编辑

    您的问题可以通过提供域来解决。

    weight(R,O,Y,G,B,Weight) :- 
        [R,O,Y,G,B] ins 0..sup, 
        Weight #= R + O*2 + Y*3 + G*4 + B*5.
    

    当你调用谓词时,你会得到域形式的答案。这通常不是我所期望的,因此调用label/1 会生成解决方案。

    ?- weight(R,O,Y,G,B,30), label([R,O,Y,G,B]).
    R = O, O = Y, Y = G, G = 0,                 
    B = 6 ;                                     
    
    R = O, O = Y, Y = 0,                        
    G = 5,                                      
    B = 2 ;                                     
    

    等等

    【讨论】:

    • 好吧,我最初尝试了类似重量(R,O,Y,G,B,W)的东西:W#= R + O * 2 + Y * 3 + G * 4 + B * 5。问题是如果我查询(R、O、1、1、1、30)我得到一个安装错误。我需要能够做到这一点。
    • 域是我所缺少的。谢谢你。我知道问题背后的总体思路,只是不知道如何生成所有可能的解决方案。我只是错过了域。
    • “用于标签”?没听说过。标记或枚举。
    • 有没有办法在没有标签和域的情况下做到这一点。
    • 我的评论只是关于“标签”的措辞。没有更深的。要求贴标签。甚至更好:简单地列举解决方案(基础)与获得答案(可能根本不包含解决方案)
    猜你喜欢
    • 1970-01-01
    • 2018-08-04
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多