我认为能够在单个脊背中绑定多个noms可能很有用,无论是否有明显的顺序。
我目前考虑到的几个用例
非currying语言中的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)))