В языке мини-канрен есть четыре условных оператора: conda
, conde
, condi
и condu
(здесь описано ). Мне известны две библиотеки мини-канрен для Racket, которые мне известны (обе описаны здесь ). Ни один из них не реализует condi
.
Мое впечатление (на полпути к прочтению «Разумного мошенника», который minikanren.org называет «Книгой») заключается в том, что condi
важен: это единственное условие, которое принимает «справедливое разделение» путем чередования ветвей, так что вы не можете не зацикливайтесь на бесконечной петле в ветви, которая никогда не заканчивается, когда завершается какая-то другая.
РЕДАКТИРОВАТЬ: Возможно, мне удалось реализовать condi
сам, здесь . В Reasoned Schemer conde
отличается от condi
только тем, что последние два аргумента для mplus
переворачиваются в mplusi
, так что это то, что я реализовал. Но это не работает более справедливо, чем conde
, насколько я могу судить.