Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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
TCL找不到错误_Tcl - Fatal编程技术网

TCL找不到错误

TCL找不到错误,tcl,Tcl,我的TCL代码有一些问题。请帮我找到它。我已经花了8个小时了,谢谢 set QA1 array() set QA2 array() set QA3 array() set COUNTER1 0 set COUNTER2 0 proc K1Axes { x y z } { global QA1 global QA2 global QA3 global COUNTER1 set fi [expr {2*4*atan(1.)*rand()}] set

我的TCL代码有一些问题。请帮我找到它。我已经花了8个小时了,谢谢

set QA1 array()
set QA2 array()
set QA3 array()
set COUNTER1 0
set COUNTER2 0

proc K1Axes { x y z } {
    global QA1
    global QA2
    global QA3
    global COUNTER1

    set fi [expr {2*4*atan(1.)*rand()}]
    set q1 [expr {0.707*cos($fi)}]
    set q2 [expr {0.707*sin($fi)}] 
    set q3 [expr {0.707}]  

    return [list $q1 $q2 $q3]

    set QA1($COUNTER1) [expr {-$q1}]
    set QA2($COUNTER1) [expr {-$q2}]
    set QA3($COUNTER1) [expr {$q3}]
    incr COUNTER1
}


proc K2Axes { x y z } {
    global QA1 
    global QA2
    global QA3
    global COUNTER2 

    set qq1  QA1($COUNTER2)
    set qq2  QA2($COUNTER2)
    set qq3  QA3($COUNTER2)

    return [list $qq1 $qq2 $qq3]

    incr COUNTER2
}

除非您的代码不正确,否则return语句将导致K1Axes和K2Axes在修改全局变量之前返回。return语句导致proc立即退出。执行无条件返回后,不会执行任何操作

编辑
我还认为您误解了tcl中的数组。像SETQA1 array这样的语句不会创建数组。尝试设置QA1以创建空数组。[我不知道我在想什么。]使用操作数组。

您的脚本有几个问题。第一个在第一行:

set QA1 array()
这和你想象的不一样。它所做的是创建一个标量变量,而不是一个包含七个字符串数组的数组

稍后,您将尝试以数组的形式访问它:

set qq1  QA1($COUNTER2)
该语句应该抛出一个错误,说明QA1不是数组,它毕竟是字符串

要在tcl中创建数组,正确的语法是:

array set QA1 {}
有关Tcl中阵列的更多信息,请阅读Tcl手册中的array命令。请注意,如果您想使用其他语言所称的数组,您应该查看列表,因为tcl数组是其他语言所称的哈希或映射

第二,你似乎在函数的中间返回。返回后,将不执行return语句之后出现的所有其他代码。因此,从未设置QA1$COUNTER1。

这是正确的代码。
请详细说明您遇到的问题的性质,以及到目前为止您尝试了什么?这个网站不是为了代码审查。这个问题似乎离题了,因为它太具体了。谢谢。我不知道。我改正了,但是。。。。我还是有点误会你怎么知道,@user1979075?请添加有关问题的错误或错误结果的详细信息。-错误消息:无法读取QA10:变量不是数组设置QA1将投诉无法读取QA1,因为变量不存在。您可能会尝试改为设置QA1以满足设置。但这不是一个空数组。它包含一个元素的值-是数组密钥可以是任何东西,甚至是空字符串和二进制值。你能告诉我如何定义一个向量,然后设置它的所有元素吗?如前所述,请阅读array命令手册,或者如果你只是来自另一种语言,请阅读array函数:
set COUNTER1 0
set COUNTER2 0

proc K1Axes { x y z } {
  global QA1 
  global QA2
  global QA3
  global COUNTER1
  set fi [expr {2*4*atan(1.)*rand()}]  
  set q1 [expr {0.707*cos($fi)}] 
  set q2 [expr {0.707*sin($fi)}] 
  set q3 [expr {0.707}]    
  set QA1($COUNTER1) [expr {-$q1}]
  set QA2($COUNTER1) [expr {-$q2}]
  set QA3($COUNTER1) [expr {$q3}]
  incr COUNTER1
  return [list $q1 $q2 $q3]
}

proc K2Axes { x y z } {
  global QA1 
  global QA2
  global QA3
  global COUNTER2 
  set qq1  $QA1($COUNTER2)
  set qq2  $QA2($COUNTER2)
  set qq3  $QA3($COUNTER2)
  incr COUNTER2
  return [list $qq1 $qq2 $qq3]
}