6

私は、純粋な関数型プログラミングの概念に慣れるために、ずる賢く遊んでいます。どの言語でも役に立つことを行う前に、いくつかの基本的なデータ構造と、それらを効果的に操作する方法を理解する必要があります。特に、列挙可能なデータ構造についてです。

このようなリストを繰り返すことができます (これを正しくインデントしているかどうかはわかりません):

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

ハッシュテーブル/ハッシュマップはスキームでどのように見えますか? それを表す実際のデータ構造はありますか、それともリストのリストを作成することになりますか? その場合、キーと値を内部リストから別の変数として取得するにはどうすればよいでしょうか?

ラムダは 2 つではなく 1 つの値を想定しているため、これは明らかに間違っています。

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

1 に答える 1

5

R6RS hashtablesを使用している場合は、 関数hashtable-keysと関数を使用できますhashtable-entries

Guile のネイティブ ハッシュテーブルを使用している場合はhash-map->list、、、、またはhash-for-eachを使用できます。hash-for-each-handlehash-fold

したがって、あなたの例では、Guile's を使用して、次のように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)
于 2011-11-15T02:22:36.330 に答える