Scheme 帮助——如何调用一个函数

标签 scheme lisp racket evaluate function-call

我是 Scheme 的新手,我正在尝试操作一个列表并返回列表中一对的 cdr。

到目前为止,这是我的代码:

(define get-userid (lambda (ls)
  (if (pair? ls)
      (cdar ls)
      (get-userid (cdar ls)))))

我想操纵的列表是:

(define *rider-preferences4*
  '((userid . anna)
    (role . rider)
    (origin . "southampton")
    (destination . "glasgow")
    (time . "15:15")
    (capacity . 2)
    (smoking . no)))

输入和输出:

> get-userid *rider-preferences4*
#<procedure:get-userid>
((userid . anna) (role . rider) (origin . "southampton") (destination . "glasgow") (time . "15:15") (capacity . 2) (smoking . no))
> get-userid (get-userid *rider-preferences4*)
#<procedure:get-userid>
**anna**

我只想要 anna 的结果,并且能够通过调用 get-userid 来完成。这怎么可能?尽管我认为这是微不足道的。

最佳答案

由于 *rider-preferences4* 是一个关联列表,您可以使用特定的 procedures (assoc, assq, assv) 检索任意键:

> (cdr (assq 'userid *rider-preferences4*))
'anna
> (cdr (assq 'destination *rider-preferences4*))
"glasgow"

所以代码是

(define (get-userid alst)
  (cdr (assq 'userid alst)))

除了可用于任何键外,它还与位置无关,所以

> (get-userid '((role . rider) (userid . anna)))
'anna

也可以。

关于Scheme 帮助——如何调用一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26568360/

相关文章:

scheme - 递归函数中的字符串追加

lisp - 尾递归函数将元素附加到列表

scheme - 在 Racket 中计算一系列

lisp - 在Scheme中查找树从根到叶的所有路径

list - Lisp 合并模式

重复元素的 Lisp 函数

opengl - OpenGL/Scheme 组合的建议

lisp - Lisp 和 Scheme 中的 WebSockets 库?

PLT 方案中的时间码

tree - 如何在方案中使用 apply 编写树形图函数