dictionary - 在 guile 方案中,如何迭代键值对列表(即 HashMap )?

标签 dictionary scheme guile

我在玩 guile 以尝试熟悉纯函数式编程概念。在我能用任何语言做任何有用的事情之前,我需要了解一些基本的数据结构以及如何有效地操作它们……特别是可枚举的数据结构。

我可以迭代这样的列表(我不确定我是否正确缩进):

(map (lambda (v)
       (display (string-append v "\n"))
     '(1 2 3))
=>
1
2
3

哈希表/哈希映射在方案中是什么样的?是否有一个真正的数据结构来表示一个,还是归结为一个列表?在这种情况下,如何从内部列表中将键和值作为单独的变量获取?

显然这是错误的,因为 lambda 期望一个值,而不是两个:
(map (lambda (key value)
       (display (string-append key " => " value))
     '('("one" 1) '("two" 2) '("three" 3)))

我正在尝试做的 Ruby 等价物是:
{ "one" => 1, "two" => 2, "three" => 3 }.map do |key, value|
  puts "#{key} => #{value}"
end

最佳答案

如果您正在使用 R6RS hashtables ,您可以使用 hashtable-keyshashtable-entries职能。

如果您使用的是 Guile's native hashtables ,您可以使用 hash-map->list , hash-for-each , hash-for-each-handle , 或 hash-fold .

因此,对于您的示例,使用 Guile 的 hash-for-each ,你会这样做:

(use-modules (ice-9 hash-table))
(define my-hash (make-hash-table))
(hash-set! my-hash "one" 1)
(hash-set! my-hash "two" 2)
(hash-set! my-hash "three" 3)
(hash-for-each (lambda (key value)
                 (format #t "~a => ~a~%" key value))
               my-hash)

关于dictionary - 在 guile 方案中,如何迭代键值对列表(即 HashMap )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8130542/

相关文章:

Python - 从 JSON 创建字典时遇到问题

python - 确保在 python 中作为另一个类的构造函数中的参数传递的字典不被改变的最佳方法/实践是什么?

resources - 建议学习计划的资源

emacs - 在方案模式下插入原始括号

command-line - 从 Scheme (Guile) 执行命令行

scheme - 控制计划中的评估(贵重)

c# - 为什么使用 64 位哈希而不是字符串时字典的内存消耗会增加?

Python:在字典中查找具有唯一值的键?

scheme - #:when keyword information

scheme - 嵌套省略号宏在 Guile 和 Racket 中不起作用