Могу ли я назначить список символов списку элементов в Guile?

Я пишу код хитрости, который получает список заданной длины, и мне нужно определить переменную для каждого элемента в списке. В настоящее время я должен сделать что-то вроде этого:

(define (foo l)
  (let ((e-1 (car l))
        (e-2 (cadr l))
        (e-2 (caddr l))
        ; ...
        (e-n (list-ref (- n 1)
                       l)))
    (compute)))

Это становится очень утомительным. Могу ли я сделать что-то подобное вместо этого?

(define (foo l)
  (symbol-def e-1 e-2 e-3 e-4 e-n l)
  (compute))

Изменить: вопрос стал более специфичным для хитрости.


person charmlessCoin    schedule 24.01.2014    source источник
comment
возможный дубликат Что такое схема, эквивалентная распаковке кортежа?   -  person amalloy    schedule 24.01.2014


Ответы (1)


Что касается Guile, я нашел модуль сопоставления ice-9, который имеет следующую форму:

(match lst
    ((pattern) expr))

Пример:

(use-modules (ice-9 match))

(let ((l '(test foo bar)))
  (match l
    ((head second third)
     second)))

; returns `foo`
person charmlessCoin    schedule 24.01.2014
comment
Это не особенно специфично для guile, так как guile использует переносимую реализацию match Алекса Шинна. - person Michael Vehrs; 13.04.2016