Интригуйте, как возвратить несколько значений?

Это может произойти, если вспомогательные библиотеки (dll или ocxs) не зарегистрированы должным образом или версии установленных библиотек отличаются (и несовместимы) с версией, с которой приложение было скомпилировано изначально.

Убедитесь, что все зависимые библиотеки зарегистрированы и правильная версия.

Возможно, вам придется перекомпилировать приложение, чтобы оно работало с более новыми версиями вспомогательных библиотек.

6
задан Community 23 May 2017 в 11:59
поделиться

3 ответа

значения, стиль передачи продолжения и список - это как минимум три способа возврата нескольких значений:

(import (rnrs))


; let-values + values
(define (foo1)
  (values 1 2 3))

(let-values (((a b c) (foo1)))
  (display (list a b c))
  (newline))

; cps
(define (foo2 k)
  (k 1 2 3))

(foo2 (lambda (a b c) 
        (display (list a b c))
        (newline)))

; list
(define (foo3)
  (list 1 2 3))
(let ((result (foo3)))
  (display result)
  (newline))
10
ответ дан 8 December 2019 в 17:23
поделиться

The Guile implementation of Scheme has a receive syntax, which it says is "much more convenient" than values. I haven't used it yet, however, but this may be useful:

http://www.gnu.org/software/guile/manual/html_node/Multiple-Values.html

2
ответ дан 8 December 2019 в 17:23
поделиться

Вы можете вернуть пару значений в cons-ячейке:

(define (foo)
  (cons 'a 5))

(let* ((r (foo))
       (x (car r))
       (y (cdr r)))
  (display x) (display y) (newline))

Вы можете обобщить это, чтобы также вернуть несколько значений в списке.

2
ответ дан 8 December 2019 в 17:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: