gpt4 book ai didi

clojure - 表示 X 的特定子集在 core.logic 中具有属性 Y

转载 作者:行者123 更新时间:2023-12-03 13:56:40 25 4
gpt4 key购买 nike

我想要:

  • 描述关于一类对象的子集的事实。
  • 声明一个对象具有一个由其他属性组成的属性。

  • 以以下为例:
    Red robotic birds are only composed of buttons, cheese, and wire.

    我想表达一类鸟,红色和机器人的鸟,有一个属性。
    这个特性是它们仅由按钮、奶酪和电线组成。线奶酪或纽扣的类型没有限制。同样因此,应该可以推断出没有由纸组成的红色机器鸟。此外,这些鸟可以由项目按钮、奶酪和电线的子集组成。

    在clojure/core.logic.prelude中,有关系和事实使用 defrelfact .
    但是,我想不出一个组合来解释这个事实。

    最佳答案

    在 Prolog 中,事实和目标之间没有区别,就像在 miniKanren 中那样。我将来可能会解决这个问题。

    顺便说一句,我不确定这是否完全回答了您的问题 - 了解您希望运行哪些类型的查询会很有帮助。

    这是经过测试的代码(针对 Clojure 1.3.0-beta1),因为我使用的是 ^:索引 技巧,如果你把它换成 ,这段代码将在 1.2.0 中运行良好^{:index true} :

    (ns clojure.core.logic.so
    (:refer-clojure :exclude [==])
    (:use [clojure.core.logic]))

    (defrel property* ^:index p ^:index t)

    (fact property* :bird :red-robotic-bird)
    (fact property* :red :red-robotic-bird)
    (fact property* :robotic :red-robotic-bird)
    (fact property* :tasty :cake)
    (fact property* :red-robotic-bird :macaw)

    (defn property [p t]
    (conde
    [(property* p t)]
    [(fresh [ps]
    (property* ps t)
    (property p ps))]))

    (defrel composition* ^:index m ^:index t)

    (fact composition* :buttons :red-robotic-bird)
    (fact composition* :cheese :red-robotic-bird)
    (fact composition* :wire :red-robotic-bird)
    (fact composition* :flour :cake)

    (defn composition [m t]
    (fresh [p]
    (composition* m p)
    (conde
    [(== p t)]
    [(property p t)])))

    试一试。
    (comment
    ;; what is a macaw composed of?
    (run* [q] (composition q :macaw))
    ;; (:wire :cheese :buttons)

    ;; what things include buttons in their composition?
    (run* [q] (composition :buttons q))
    ;; (:red-robotic-bird :macaw)

    ;; does a macaw include flour in its composition?
    (run* [q] (composition :flour :macaw))
    ;; ()

    ;; is a macaw a bird?
    (run* [q] (property :bird :macaw))
    ;; (_.0)

    ;; is a cake a bird?
    (run* [q] (property :bird :cake))
    ;; ()

    ;; what are the properties of a macaw?
    (run* [q] (property q :macaw))
    ;; (:red-robotic-bird :robotic :bird :red)
    )

    关于clojure - 表示 X 的特定子集在 core.logic 中具有属性 Y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713424/

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