Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
53
Task/Mad-Libs/Picat/mad-libs.picat
Normal file
53
Task/Mad-Libs/Picat/mad-libs.picat
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
import util.
|
||||
|
||||
go =>
|
||||
Story = read_story(),
|
||||
println("Fill in the proper values:"),
|
||||
nl,
|
||||
Map = get_info(get_tags(Story)) ,
|
||||
println("\nHere is the story:\n"),
|
||||
println(replace_tags(Story,Map)),
|
||||
nl.
|
||||
|
||||
read_story() = Story =>
|
||||
println("Write the story template with <tag> for the tags and finish with an empty line."),
|
||||
nl,
|
||||
Story1 = read_line(),
|
||||
while (Line = read_line(), Line != "")
|
||||
Story1 := Story1 ++ " " ++ Line
|
||||
end,
|
||||
Story = Story1.
|
||||
|
||||
%
|
||||
% Get the tags between <...>.
|
||||
%
|
||||
get_tags(S) = Tags =>
|
||||
Len = S.length,
|
||||
StartPos = [P: {C,P} in zip(S,1..Len), C = '<'],
|
||||
EndPos = [P: {C,P} in zip(S,1..Len), C = '>'],
|
||||
Tags = [slice(S,Start,End) : {Start,End} in zip(StartPos,EndPos)].remove_dups().
|
||||
|
||||
%
|
||||
% Get the tag info from user and return a map
|
||||
%
|
||||
get_info(Tags) = Map =>
|
||||
Map = new_map(),
|
||||
foreach(Tag in Tags)
|
||||
printf("%w: ", Tag),
|
||||
Map.put(Tag,readln())
|
||||
end.
|
||||
|
||||
% Replace all the <tags> with user values.
|
||||
replace_tags(S,Map) = S =>
|
||||
foreach(Tag=Value in Map)
|
||||
S := replace_string(T,Tag,Value)
|
||||
end.
|
||||
|
||||
% Picat's replace/3 does not handle substrings well,
|
||||
% so we roll our own...
|
||||
replace_string(List,Old,New) = Res =>
|
||||
Res = copy_term(List),
|
||||
while (find(Res,Old,_,_))
|
||||
once(append(Before,Old,After,Res)),
|
||||
Res := Before ++ New ++ After
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue