Dictionary 在guile方案中,如何迭代键值对列表(即哈希映射)?

Dictionary 在guile方案中,如何迭代键值对列表(即哈希映射)?,dictionary,scheme,guile,Dictionary,Scheme,Guile,我正在玩guile,试图熟悉纯函数式编程的概念。在我能用任何语言做任何有用的事情之前,我需要了解一些基本的数据结构以及如何有效地操作它们。。。特别是可枚举数据结构 我可以这样迭代列表(我不确定是否正确缩进): 在scheme中,哈希表/哈希映射是什么样子的?是否有一个真实的数据结构来表示一个数据结构,或者可以归结为制作一个列表列表?在这种情况下,如何从内部列表中获取作为独立变量的键和值 显然这是错误的,因为lambda需要一个值,而不是两个: (map (lambda (key value)

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

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

在scheme中,哈希表/哈希映射是什么样子的?是否有一个真实的数据结构来表示一个数据结构,或者可以归结为制作一个列表列表?在这种情况下,如何从内部列表中获取作为独立变量的键和值

显然这是错误的,因为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
如果正在使用,则可以使用
哈希表键
哈希表项
函数

如果正在使用,则可以使用
散列映射->列表
对每个
使用散列,对每个句柄使用
散列
,或
散列折叠

因此,对于您的示例,对每个使用Guile的
散列,您可以执行以下操作:

(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)

另外,当函数的返回值未使用时,您应该为每个
使用
,而不是
映射
。谢谢,我从wiki的循环页面上获得了映射,并假设它已被使用,因为返回值可以忽略:)很高兴知道!太好了,谢谢,我想在查看库之前,我会先弄清楚哪些是本地可用的(至少是基本数据结构)。我以前从未见过本机哈希表支持:)
(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)