Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 如果列表中的元素为true,则返回true_List_Oz_Mozart - Fatal编程技术网

List 如果列表中的元素为true,则返回true

List 如果列表中的元素为true,则返回true,list,oz,mozart,List,Oz,Mozart,我需要在Oz中做两个非常相似的练习: *。编写函数{Some L P},该函数接受一个列表L和一个布尔函数P。如果P对L的至少一个元素返回true,则返回true,否则返回false *。编写函数{All L P},当且仅当L中所有元素的P为true时,该函数返回true 我不确定的是,如果我有这样一个函数,我如何才能使它返回true或false: declare fun{P X} //bolean function if X==2 then true else false

我需要在Oz中做两个非常相似的练习:

*。编写函数{Some L P},该函数接受一个列表L和一个布尔函数P。如果P对L的至少一个元素返回true,则返回true,否则返回false

*。编写函数{All L P},当且仅当L中所有元素的P为true时,该函数返回true

我不确定的是,如果我有这样一个函数,我如何才能使它返回true或false:

    declare
fun{P X} //bolean function
   if X==2 then true
   else false
   end
end

fun{Some L P} //Some function
   case L
   of nil then nil
   [] X|Xr then
      if {P X} == true then X|{Some Xr P}
      else {Some Xr P}
      end
   end
end

{Browse {Some [1 2 3] P}} 
2为true,因此它必须返回true

一些提示:

首先,在列表为空的情况下考虑期望的结果。此时,您返回的是
nil
。您可能应该返回
false
。因为在空列表中,不能有任何元素满足谓词


然后考虑一个例子,你发现一个元素p为真。我认为您不必遍历列表的其余部分…

在函数
中,如果列表为空,您将返回一个nil值,但您希望函数返回一个布尔值,因此它应该为false,因为空列表不一定能够实现
p
函数,无论它是什么。然后,一旦找到满足
P
的元素,就不需要检查列表的其余部分。您可以使用Oz运算符
orelse
,该运算符用作逻辑或运算符,但仅当第一个参数为false时才计算第二个参数

函数
{All L p}
将以类似的方式工作,现在当您发现不满足
p
的元素时,可以停止检查列表,因此可以使用Oz操作符
然后
。唯一的区别是,现在您必须检查列表何时由一个元素组成(在计算最后一个元素时出现相同问题),因为下一步的函数将计算一个返回false的nil元素,使
语句中的所有函数值都为false

最后一件事:Oz中的行注释是这种形式的
%My comments
,与斜杠不同

对不起,我的回答很长,我的英语,代码应该是:

declare
fun{P X}
   if X==2 then true
   else false
   end
end

fun{Some L P}
   case L
   of nil then false
   [] X|Xr then {P X} orelse {Some Xr P}
   end
end

fun{All L P}
   case L
   of nil then false
   [] [X] then {P X}
   [] X|Xr then {P X} andthen {All Xr P}
   end
end  

{Browse {Some [1 2 5] P}} 
{Browse {All [2 2 2 2] P}}