drunk
发表于 2012-6-7 13:18:26
本帖最后由 drunk 于 2012-6-7 13:25 编辑
楼主是这个意思?
Local $a = StringSplit("a,b,1,...",",")
$b = "3,2,1,0"
MsgBox(0,0,check($a, $b))
Func check($1, $2, $sign = ",")
If Not IsArray($1) Then $1 = StringSplit($1, $sign)
If Not IsArray($2) Then $2 = StringSplit($2, $sign)
Local $len = $1, $i, $boolean = True
If $2 < $len Then $len = $2
For $i = 1 To $len
If $1[$i] == $2[$i] Then
$boolean = False
ExitLoop
EndIf
Next
Return $boolean
EndFunc
x163169x
发表于 2012-6-7 13:57:37
本帖最后由 x163169x 于 2012-6-7 14:03 编辑
楼主是这个意思?
drunk 发表于 2012-6-7 13:18 http://www.autoitx.com/images/common/back.gif
谢谢兄弟帮忙,貌似你的表达式有错误, $1==$2?不管如何修改参数,你这里的结果都是FALSE.
你这个模型只对数列个数有结果,没有对数列内容有表述。
此外,即便模型成立,也只对 if语句里单一的表达and 或者OR起到作用, 如果同时出现 AND 和 OR这种单一递归循环可能不成立。
netegg
发表于 2012-6-7 14:47:38
本帖最后由 netegg 于 2012-6-7 14:51 编辑
回复 47# drunk
重点不在这,如果做遍历的话,是要遍历所有运算符和数据,不单单是数据(这个也是我在琢磨的地方)
Qokelate
发表于 2012-6-8 12:56:03
本帖最后由 Qokelate 于 2012-6-8 12:59 编辑
表示看不懂楼主想说啥,,楼上楼下继续。。。。。
netegg
发表于 2012-6-8 15:56:32
本帖最后由 netegg 于 2012-6-8 16:17 编辑
Local $calculator= ['bitor', 'bitand']
Local $bool =['1=1', '2<>2', '3=4', '4=4', '5<>5']
For $i In $calculator
For $j In $bool
For $k In $bool
If Execute($i & '(' & Execute($j) &','& Execute($k)&')') Then ConsoleWrite($i& '(' &$j & ',' & $k & ')'& @cr)
Next
Next
Next
简单了些,另外再给lz一个
For $i = 1 To 10
For $j =1 To 10
If Number(Execute('_add(' & $j &','&$i&')')) = 17 Then ConsoleWrite($j &','&$i& @cr)
Next
Next
Func _add($i, $j)
return $i + $j
EndFunc
如何扩展lz自己想想吧
至于lz题目的要求,扩展运算符数组应该就行了
lvjing79
发表于 2012-6-9 07:53:32
像这种复杂的条件逻辑关系组合,最好是先从一个简单的模型开始,使用伪代码描述清楚。否则楼主一来就给出一长串的东西,不仅让别人不好理解,自己也不好表述。
drunk
发表于 2012-6-9 11:55:08
回复 47# x163169x
你测试好再说好不,Local $a = StringSplit("a,b,1,...",",")
$b = "3,2,4,0"
MsgBox(0,0,check($a, $b))
至于你想添加符号,也可以嘛,分别用1234表示>,<,=,<>这些,可能要两个函数了,自己想.
netkill
发表于 2012-6-9 17:15:24
同意一楼,没看明白你想做什么?
netegg
发表于 2012-6-10 01:51:19
本帖最后由 netegg 于 2012-6-10 12:11 编辑
回复 52# drunk
不对,小看这个东西了,就像我前面说的,不是求什么结果,而是给定一个结果求n多个原因
lz不要求到底什么原因,只要逻辑表达式最后的运算结果符合即可,这个东西一层好办,层越多越麻烦
binghc
发表于 2012-6-10 12:52:29
回复 1# x163169x
Dim $arr=
Dim $b=
$str=''
For $i=0 To UBound($arr)-1
$str&=$b[$i]&'>'&$arr[$i]&' and '
Next
$str=StringTrimRight($str,5)
ConsoleWrite($str&@CRLF)
If Execute($str) Then
MsgBox('','yes','true')
Else
MsgBox('','no','false')
EndIf
netegg
发表于 2012-6-10 14:33:55
本帖最后由 netegg 于 2012-6-10 22:42 编辑
回复x163169x
binghc 发表于 2012-6-10 12:52 http://www.autoitx.com/images/common/back.gif
大体是这个意思了,不过要遍历运算符(你例子中的'and'和'>')
Local $aBool = ['1=1', '2<>2', '3=4', '4=4', '5<>5']
Local $tempA = $aBool
Local $tempB = $aBool
For $j = 1 To 4
If Execute(Execute($tempA) & ' And ' & Execute($aBool[$j])) Then
$tempA &= ' and ' & $aBool[$j]
ConsoleWrite($tempA & @CR)
EndIf
If Execute(Execute($tempB) & ' Or ' & Execute($aBool[$j])) Then
$tempB &= ' Or ' & $aBool[$j]
ConsoleWrite($tempB & @CR)
EndIf
Next
lz再看看这段吧
x163169x
发表于 2012-6-17 13:35:41
谢谢各位大大鼎力相助,这段时间出去旅游了,未及时回复请谅解,各个范例我会在下个礼拜好好学习的。
再次感谢各位大大。
x163169x
发表于 2012-6-17 13:42:04
像这种复杂的条件逻辑关系组合,最好是先从一个简单的模型开始,使用伪代码描述清楚。否则楼主一来就给出一 ...
lvjing79 发表于 2012-6-9 07:53 http://www.autoitx.com/images/common/back.gif
这种本身就很难阐述清楚,阐述不不清楚的原因就是因为看似很简单,但实质非常复杂。但是我有句话已经很明确阐述了,那就是IF后面的代码不是写的,是程序自己构造的。