История изменений
Исправление monk, (текущая версия) :
«size», 10.0,
Тут даже не _string ...
Можно сочинить что-то такое:
(define (node-new-child gegl params)
(define (get-type x)
(cond
[(integer? x) _int]
[(flonum? x) _float]
[(string? x) _string]
[else _pointer]))
(define-values (args arg-types)
(let loop ([args null] [arg-types null] [params params])
(if (null? params)
(values (reverse (cons #f args) (reverse (cons _pointer arg-types)))
(let ([param (car params)])
(loop (list* (cdr param) (symbol->string (car param)) args)
(list* (get-type (cdr param)) _string arg-types)
(cdr params))))))
(defgegl gegl-node-new-child (_cprocedure arg-types _pointer))
(apply gegl-node-new-child gegl args))
И использовать как
(node-new-child gegl `((operation "gegl:text")
(size 10.0)
(color ,(gegl-color-new "rgb(1.0,1.0,1.0)"))))
Кстати, если в defgegl имя и c-id отличаются только дефисами, то c-id не нужен.
А можно сделать как в Haskell. Там стоит
(defgegl gegl-node-new-child (_fun _pointer (_string = "operation") _string (_pointer = #f) -> _pointer)
А дальнейшие поля заполняются через gegl-node-set.
Исходная версия monk, :
«size», 10.0,
Тут даже не _string ...
Можно сочинить что-то такое:
(define (node-new-child gegl params)
(define (get-type x)
(cond
[(integer? x) _int]
[(flonum? x) _float]
[(string? x) _string]
[else _pointer]))
(define-values (args arg-types)
(let loop ([args null] [arg-types null] [params params])
(if (null? params)
(values (reverse (cons #f args) (reverse (cons _pointer arg-types)))
(let ([param (car params)])
(loop (list* (cdr param) (symbol->string (car param)) args)
(list* (get-type (cdr param)) _string arg-types)
(cdr params))))))
(defgegl gegl-node-new-child (_cprocedure arg-types _pointer))
(apply gegl-node-new-child gegl args))
И использовать как
(node-new-child gegl `((operation "gegl:text)
(size 10.0)
(color ,(gegl-color-new "rgb(1.0,1.0,1.0)"))))
Кстати, если в defgegl имя и c-id отличаются только дефисами, то c-id не нужен.
А можно сделать как в Haskell. Там стоит
(defgegl gegl-node-new-child (_fun _pointer (_string = "operation") _string (_pointer = #f) -> _pointer)
А дальнейшие поля заполняются через gegl-node-set.