Sysop: | Amessyroom |
---|---|
Location: | Fayetteville, NC |
Users: | 40 |
Nodes: | 6 (0 / 6) |
Uptime: | 11:11:54 |
Calls: | 291 |
Files: | 910 |
Messages: | 76,440 |
The task is to somehow implement Amb, and demonstrate it with
a program which chooses one word from each of the following
four sets of character strings to generate a four-word
sentence:
"the" "that" "a"
"frog" "elephant" "thing"
"walked" "treaded" "grows"
"slowly" "quickly"
The constraint to be satisfied is that the last character of
each word (other than the last) is the same as the first
character of its successor.
The only successful sentence is "that thing grows slowly";
other combinations do not satisfy the constraint and thus
fail.
The task is to somehow implement Amb, and demonstrate it with
a program which chooses one word from each of the following
four sets of character strings to generate a four-word
sentence:
"the" "that" "a"
"frog" "elephant" "thing"
"walked" "treaded" "grows"
"slowly" "quickly"
The constraint to be satisfied is that the last character of
each word (other than the last) is the same as the first
character of its successor.
The only successful sentence is "that thing grows slowly";
other combinations do not satisfy the constraint and thus
fail.
newLISP
(define (cartesian-product lists)
(if (null? lists)
'(())
(let (subproduct (cartesian-product (rest lists)))
(apply append
(map
(fn (x) (map (fn (xs) (cons x xs)) subproduct))
(first lists))))))
(define (good? xs)
(for-all
(fn (pair) (starts-with (pair 1) ((pair 0) -1)))
(map list (0 -1 xs) (rest xs))))
(filter good?
(cartesian-product
'(("preconize" "cozy" "Lilliputian")
("climb" "nub" "snob" "end" "yet")
("however" "by" "but" "so" "tot")
("the" "that" "a" "tack" "of")
("frog" "elephant" "thing")
("walked" "treaded" "grows")
("slowly" "quickly")
("yank" "can" "you" "choose")
("won't" "understand"))))
(("cozy" "yet" "tot" "that" "thing" "grows" "slowly" "you"
"understand")
("Lilliputian" "nub" "but" "that" "thing" "grows" "slowly"
"you" "understand"))
On 8/5/2024 4:34 PM, B. Pym wrote:
The task is to somehow implement Amb, and demonstrate it with
a program which chooses one word from each of the following
four sets of character strings to generate a four-word
sentence:
"the" "that" "a"
"frog" "elephant" "thing"
"walked" "treaded" "grows"
"slowly" "quickly"
The constraint to be satisfied is that the last character of
each word (other than the last) is the same as the first
character of its successor.
The only successful sentence is "that thing grows slowly";
other combinations do not satisfy the constraint and thus
fail.
newLISP
(define (cartesian-product lists)
(if (null? lists)
'(())
(let (subproduct (cartesian-product (rest lists)))
(apply append
(map
(fn (x) (map (fn (xs) (cons x xs)) subproduct))
(first lists))))))
(define (good? xs)
(for-all
(fn (pair) (starts-with (pair 1) ((pair 0) -1)))
(map list (0 -1 xs) (rest xs))))
(filter good?
(cartesian-product
'(("preconize" "cozy" "Lilliputian")
("climb" "nub" "snob" "end" "yet")
("however" "by" "but" "so" "tot")
("the" "that" "a" "tack" "of")
("frog" "elephant" "thing")
("walked" "treaded" "grows")
("slowly" "quickly")
("yank" "can" "you" "choose")
("won't" "understand"))))
(("cozy" "yet" "tot" "that" "thing" "grows" "slowly" "you"
"understand")
("Lilliputian" "nub" "but" "that" "thing" "grows" "slowly"
"you" "understand"))
Did you avoid using Scheme because it's bad for this
type of string manipulation?
(defun is-shiritori (wlist)(if-match @(scan @(require (@w1 @w2 . @nil)
[apply maprend [chain list [iff is-shiritori list]]'(("preconize" "cozy" "Lilliputian")