请分享您的想法,参加2024年Clojure状态调查!

欢迎!请参阅关于页面以了解这个网站的一些基本信息。

0
core.logic
我认为在单个存储器中绑定多个noms可能有用,不论是否有显著的顺序。

我目前考虑到的几个用例

非柯里化语言中的lambdas。这里顺序很重要。

(== (list 'fn (ties [x y] (list '+ x y)))
    (list 'fn (ties [z w] (list '+ z w)))


我的原始用例,逻辑公式中的自由/量化变量。顺序不重要(注意第二个体中的noms已被交换)。

(== (list '∀ (ties #{x y} (list '= (list '+ x y) (list '+ y x))))
    (list '∀ (ties #{z w} (list '= (list '+ w z) (list '+ z w)))))



我在这里有一个草案实现: https://github.com/tomjack/core.logic/compare/ties

此实现的潜在问题
- 重新扩展IWalkTerm到IPersistentSet是否合适?
- Tie和Ties应具有统一的接口吗?(例如(tie? (ties #{x} x)))

4 答案

0

评论者:dnolen

我真的觉得不需要集合位,向量语法就很好。同时也应避免需要将IWalkTerm回溯到集合。是的,tie?应该在任何情况下都工作。

0

评论者:tomoj

嗯...

`
(== (list 'fn (ties [x y] (list '- x y)))

(list 'fn (ties [z w] (list '- w z)))

`

我想不是这样。

您的意思是顺序始终很重要(取消排列的组合),还是说它永远不重要(不要使用ties来处理上述类的情况)?

0

评论者:dnolen

嗯,好观点。我会再考虑一下。

0
参考:[https://clojure.atlassian.net/browse/LOGIC-138](https://clojure.atlassian.net/browse/LOGIC-138)(由tomoj报告)
...