Clojure for

 

for
(for seq-exprs body-expr)
 
列表内涵逻辑,接收一组 ( 一个或多个 ) 绑定 form( binding-form )/ 集合表达式( collection-expr )对,每个绑定 form( binding- form )/ 集合表达式( collection-expr )对后面跟着 0 个或多个 modifier ,最后获得一个求值表达式表示的惰性序列。
 
这里的 seq-exprs 形式为:
[ binding-form collection-expr
  modifier modifier modifier ]
 
<!--[if ppt]--> <!--[endif]--> 或者多个的表现形式为: 
[ binding-form collection-expr
  modifier modifier modifier
  binding-form collection-expr
  modifier modifier modifier
 
  binding-form collection-expr
  modifier modifier modifier ]
 
<!--[if ppt]--> <!--[endif]--> 例子: 
user=> (for [x [0 1 2 3 4 5]
  #_=>       :let [y (* x 3)]
  #_=>       :when (even? y)]
  #_=>   y)
(0 6 12)
 
user=> (for [x '(0 1 2 3 4 5)
  #_=>     :let [y (* x 3)]
  #_=>     :when (even? y)]
  #_=>  y)
(0 6 12)
<!--[if ppt]--> <!--[endif]-->
 
再来个例子:
user=> (for [x [0 1 2 3 4 5]
  #_=>       y [0 1 2 3]
  #_=>       :let [z (* x y)]]
  #_=>   z)
(0 0 0 0 0 1 2 3 0 2 4 6 0 3 6 9 0 4 8 12 0 5 10 15)
 
 
再来个例子:
user=> (for [x [0 1 2 3 4 5]
  #_=>       :let [x (* x 2)]
  #_=>       y [0 1 2 3]
  #_=>       :let [z (* x y)]]
  #_=>   z)
(0 0 0 0 0 2 4 6 0 4 8 12 0 6 12 18 0 8 16 24 0 10 20 30)
 
 
 
 类似的还有loop-when-recur:
(loop [bindings*] exprs*)
 
(when test & body)
 
(recur exprs*)
 
遍历0-20数字:[0,20)
=> (loop [i 0]
#_=>  (when (< i 20)
#_=>   (println i)
#_=>   (recur (inc i))))
 
 
=> (loop [i 0]
#_=>  (when (< i 20)
#_=>   (loop [j 0]
#_=>    (when (< j 20)
#_=>     (println "(", i, j, ")")
#_=>     (recur (inc j))))
#_=>   (recur (inc i))))
 
 
 
(define tree (list 0 
               (list (list #'a' -1) 
                 (list #'z' 0) 
                 (list #'c' 0) 
                 (list #'x' 0) 
                 (list #'e' 0) 
                 (list #'f' 0) 
                 (list #'g' 0) 
                 (list #'h' 1) 
                 (list #'i' 1) 
                 (list #'j' 1) 
                 (list #'k' 1) 
                 (list #'l' 2) 
                 (list #'m' 2) 
                 (list #'n' 3) 
                 (list #'o' 3) 
                 (list #'p' 3) 
                 (list #'q' 5) 
                 (list #'r' 6) 
                 (list #'s' 6) 
                 (list #'t' 6) 
                 (list #'u' 6) 
                 (list #'v' 6) 
                 (list #'w' 6) 
                 (list #'d' 6) 
                 (list #'y' 6) 
                 (list #'b' 6))))
                 
(define iterate 
  (lambda 
    (t)
    (let* ((t0 (car (cdr t))) 
           (i (car t)) 
           (node (list-ref t0 i))) 
      
      
      ;(display (car node))
      ;; search the children of node, which the parent is node, with parent index is i
      (let ((vn (list (list node i))) 
            (ii 0)
            (nvn (list))) 
        
        (do () 
          ((<= (length vn) 0))
          (map (lambda (x) 
                 ;(display "searched node:")
                 ;(newline)
                 (display (list-ref x 0)) 
                 (newline)
                 (map (lambda (z) 
                        (if (= (list-ref z 1) (list-ref x 1))
                          (set! nvn (cons (list z ii) nvn)))
                        (set! ii (+ ii 1))) 
                      t0)
                 (set! ii 0)
               ) vn)
          (set! vn (reverse nvn))
          (set! nvn (list))
          ;(display vn) (newline)
          ))
      )))
 
> (iterate tree)
(a -1)
(z 0)
(c 0)
(x 0)
(e 0)
(f 0)
(g 0)
(h 1)
(i 1)
(j 1)
(k 1)
(l 2)
(m 2)
(n 3)
(o 3)
(p 3)
(q 5)
(r 6)
(s 6)
(t 6)
(u 6)
(v 6)
(w 6)
(d 6)
(y 6)
(b 6)
$3 = unspecified
 
内容概要:本文详细介绍了如何利用Simulink进行自动代码生成,在STM32平台上实现带57次谐波抑制功能的霍尔场定向控制(FOC)。首先,文章讲解了所需的软件环境准备,包括MATLAB/Simulink及其硬件支持包的安装。接着,阐述了构建永磁同步电机(PMSM)霍尔FOC控制模型的具体步骤,涵盖电机模型、坐标变换模块(如Clark和Park变换)、PI调节器、SVPWM模块以及用于抑制特定谐波的陷波器的设计。随后,描述了硬件目标配置、代码生成过程中的注意事项,以及生成后的C代码结构。此外,还讨论了霍尔传感器的位置估算、谐波补偿器的实现细节、ADC配置技巧、PWM死区时间和换相逻辑的优化。最后,分享了一些实用的工程集成经验,并推荐了几篇有助于深入了解相关技术和优化控制效果的研究论文。 适合人群:从事电机控制系统开发的技术人员,尤其是那些希望掌握基于Simulink的自动代码生成技术,以提高开发效率和控制精度的专业人士。 使用场景及目标:适用于需要精确控制永磁同步电机的应用场合,特别是在面对高次谐波干扰导致的电流波形失真问题时。通过采用文中提供的解决方案,可以显著改善系统的稳定性和性能,降低噪声水平,提升用户体验。 其他说明:文中不仅提供了详细的理论解释和技术指导,还包括了许多实践经验教训,如霍尔传感器处理、谐波抑制策略的选择、代码生成配置等方面的实际案例。这对于初学者来说是非常宝贵的参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值