为什么我的条件语句被忽略了?

seb*_*ebf 1 scripting scheme if-statement gimp

我正在尝试为GIMP 2.8编写一个方案脚本,它将调整大小并重命名/复制文件.作为其中的一部分,我想根据脚本中的布尔值设置更改输出文件名.

然而,我的条件被忽略了.这是脚本的摘录(基于此线程中的一个):

(define (script-fu-batch-resize globexp globext src) 
 (define (resize-img n f newx suffix srcdir removetailingunderscore) 
  (let* ((fname (car f))

     ;get path, short name + extension (remember to remove source dir to REPLACE with suffix!)
    (fullname (car (last (strbreakup fname "\\"))))
    (filepath (substring fname 0 (- (string-length fname) (string-length (string-append srcdir fullname)))))
    (name0 (car (strbreakup fullname ".")))
    (name1 (substring name0 0 (- (string-length name0) 1)) )

    (when 
    (> 1 0)
    (
        (name0 (name1) )
    )
    )

    (extension (cadr (strbreakup fullname ".")))

     (img   (car (gimp-file-load 1 fname fname)))) 
    (gimp-image-undo-disable img) 
    (let* 
      ( 
         (oldx (car (gimp-image-width  img))) 
         (oldy (car (gimp-image-height img))) 
         (newy (/ oldy (/ oldx newx))) 
       ) 
       (gimp-image-scale img newx newy)         ;changed for Gimp v2.6
     )              
    (gimp-file-save 1 img (car (gimp-image-get-active-drawable img)) (string-append filepath suffix "\\" name1 "." extension) fname) 
        (gimp-image-delete img) 
   ) 
   (if (= n 1) 1 (resize-img (- n 1) (cdr f) newx suffix srcdir removetailingunderscore)) 
  )
 (define sourcepattern (string-append globexp src globext))
 (define files (file-glob sourcepattern 0))                     ;changed for Gimp v2.6 
 (resize-img (car files) (car (cdr files)) 55 "micro" src 1) 

)
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用whenif-else但无论怎样执行条件块内没有声明(即如果我有真假同一语句中如果没有会被处决).我的条件完全被忽略但我不知道为什么.GIMP不会报告任何语法错误.

我怀疑我在define声明中没有条件,除了有一个在它下面工作.

任何人都可以看到有什么问题?为什么我的条件被忽略了?

Ósc*_*pez 5

when表达式有几个问题:

  • 它使用了一些不必要的括号
  • 条件(> 1 0)总是正确的,因此它是无用的
  • 这不是改变变量值的方法,使用 set!
  • 将整个when表达式移动到变量定义部分之外let*,并使其成为主体中的第一个语句let*

你需要做的是这样的事情:

(define (script-fu-batch-resize globexp globext src) 
  (define (resize-img n f newx suffix srcdir removetailingunderscore) 
    (let* ((fname (car f))
           (fullname (car (last (strbreakup fname "\\"))))
           (filepath (substring fname 0 (- (string-length fname) (string-length (string-append srcdir fullname)))))
           (name0 (car (strbreakup fullname ".")))
           (name1 (substring name0 0 (- (string-length name0) 1)))
           (extension (cadr (strbreakup fullname ".")))           
           (img   (car (gimp-file-load 1 fname fname))))
      (when (> 1 0)
        (set! name0 name1))
      <rest of the body>)))
Run Code Online (Sandbox Code Playgroud)

  • 比你多.它是let*语句中的一个组合,以及多余的括号.它现在正在工作,我正在重新构建功能(从一个有用的条件开始!) (2认同)