我正在尝试找到包含逻辑表达式的函数的解决方案,但到目前为止还没有成功。
首先,我定义了几个函数:
isPlant(x) := is ((x = "tree") or (x = "grass"));
isAnimal(x) := is ((x = "cat") or (x = "dog"));
isLiving(x) := is (isAnimal(x) or isPlant(x));
接下来,我试图找到具有这些函数的方程的所有解,但没有得到任何解决方案:
solve([Living(x) = true], [x]); //this returns an empty list instead of [x = "cat", x = "dog", x = "tree", x = "grass"]
是否有可能在Maxima中获得这些功能的解决方案?
答案 0 :(得分:0)
solve函数假定域是一组数字。如果我们首先指定域
(%i) domain : {"tree","grass","cat","dog"};
(%o) {cat, dog, grass, tree}
然后我们可以使用subset
函数来找到方程的解。
(%i) subset(domain,lambda([x], is(isPlant(x)=true)));
(%o) {grass, tree}
您定义的函数是谓词,因此返回值true
和false
,这意味着等式predicate(x)=true
等同于predicate(x)
。例如,IsLiving(x)=true
当且仅当IsLiving(x)
时。因此,我们不是找到域的元素是等式predicate(x)=true
的解,而是找到满足谓词的域的元素,这更简洁。
(%i) subset(domain,isLiving);
(%o) {cat, dog, grass, tree}
(%i) subset(domain,isPlant);
(%o) {grass, tree}