hexlet-pairs 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/pairs.rb +45 -0
  3. metadata +43 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: facc1ca1d5cbfdee6ff9f5bcdb6037b1c4091a1ec17afe9d46b1b1af9e5b9074
4
+ data.tar.gz: 9b72843b9d2028eda4974370673bbe8d9f545ca89dcd094d4aa6b98c777e676e
5
+ SHA512:
6
+ metadata.gz: 4d9d2944a7406212ccde4c961b87616a2b54e64df64b8645fa531eb3a6ae45c35c6dd1194308422657d227a060bf97f5634b6424168e738cd16ee3077e590d25
7
+ data.tar.gz: 731d00da4ec7591cb6032256ab3b3057636e2b0a37b48a46fb4ba3814b7a5ccb0daf9cff4f0ff63e30cdc61a382d20ddf401f1a2649ef3672b59b3781ce3a76d
data/lib/pairs.rb ADDED
@@ -0,0 +1,45 @@
1
+ module Pairs
2
+ def self.cons(left, right)
3
+ lambda { |message|
4
+ case message
5
+ when 'car'
6
+ left
7
+ when 'cdr'
8
+ right
9
+ else
10
+ raise "Unknown message #{message}"
11
+ end
12
+ }
13
+ end
14
+
15
+ def self.check_pair(pair)
16
+ return if pair?(pair)
17
+
18
+ raise NoMethodError, pair.to_s
19
+ end
20
+
21
+ def self.car(pair)
22
+ check_pair(pair)
23
+ pair.call('car')
24
+ end
25
+
26
+ def self.cdr(pair)
27
+ pair.call('cdr')
28
+ end
29
+
30
+ def self.pair?(pair)
31
+ pair.instance_of? Proc
32
+ end
33
+
34
+ def self.to_string(pair)
35
+ rec = lambda { |pair_inner|
36
+ return pair_inner.to_s unless pair?(pair_inner)
37
+
38
+ left = car(pair_inner)
39
+ right = cdr(pair_inner)
40
+ "(#{rec.call(left)}, #{rec.call(right)})"
41
+ }
42
+
43
+ rec.call(pair)
44
+ end
45
+ end
metadata ADDED
@@ -0,0 +1,43 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hexlet-pairs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Hexlet
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-03-03 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email: info@hexlet.io
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/pairs.rb
20
+ homepage: https://github.com/hexlet-components/ruby-pairs
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '2.4'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubygems_version: 3.0.3
40
+ signing_key:
41
+ specification_version: 4
42
+ summary: A SICP'ish Functional Pairs implemented in Ruby
43
+ test_files: []