2024年Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面以了解更多关于如何使用本站的信息。

0
core.logic
我认为在一本夹子中有没有顺序地绑定多个noms可能有用。

我目前想到的一些用例

非柯里化语言中的lambda函数。这里顺序很重要。

(== (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)))

`

我觉得不行。

您是指订单总是重要的(去掉排列的内容),还是说它永远不重要(在上面的情况中不要使用平局?)

0

评论者:dnolen

啊嚏,好主意。我会再考虑一下。

0
...