首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以将符号列表分配给一个元素列表吗?

我可以将符号列表分配给一个元素列表吗?
EN

Stack Overflow用户
提问于 2014-01-24 01:59:11
回答 3查看 124关注 0票数 0

我正在编写一些获得一个集合长度列表的guile代码,我需要为列表中的每个元素定义一个变量。现在,我要做这样的事情:

代码语言:javascript
复制
(define (foo l)
  (let ((e-1 (car l))
        (e-2 (cadr l))
        (e-2 (caddr l))
        ; ...
        (e-n (list-ref (- n 1)
                       l)))
    (compute)))

这太乏味了。不管怎样,我可以做这样的事吗?

代码语言:javascript
复制
(define (foo l)
  (symbol-def e-1 e-2 e-3 e-4 e-n l)
  (compute))

编辑:提出了更多针对欺诈的问题。

EN

回答 3

Stack Overflow用户

发布于 2014-01-24 02:27:41

具体到Guile,我找到了冰-9匹配模块,它有以下形式:

代码语言:javascript
复制
(match lst
    ((pattern) expr))

示例:

代码语言:javascript
复制
(use-modules (ice-9 match))

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

; returns `foo`
票数 0
EN

Stack Overflow用户

发布于 2022-07-05 18:26:40

使用多个值是将已知长度列表中的元素绑定到变量的一种方法:

代码语言:javascript
复制
;;; Using SRFI-8 receive syntax
(use-modules (ice-9 receive))
(define (foo l)
  (receive (e-1 e-2 e-3 e-4) (apply values l)
    (format #t "~S~%~S~%~S~%~S~%" e-1 e-2 e-3 e-4)))
(foo '(1 2 3 4))

;;; Using SRFI-11 let-values syntax
(use-modules (srfi srfi-11))
(define (foo2 l)
  (let-values (((e-1 e-2 e-3 e-4) (apply values l)))
    (format #t "~S~%~S~%~S~%~S~%" e-1 e-2 e-3 e-4)))
(foo2 '(a b c d))

;;; Using R5RS call-with-values
(define (foo3 l)
  (call-with-values
    (lambda () (apply values l))
    (lambda (e-1 e-2 e-3 e-4)
      (format #t "~S~%~S~%~S~%~S~%" e-1 e-2 e-3 e-4))))
票数 0
EN

Stack Overflow用户

发布于 2022-10-19 18:42:56

另一件值得一提的事情是定义--价值。

代码语言:javascript
复制
(define (bar l)
  (define-values (a b c d) (apply values l))
  (compute a b c d))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21323022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档