Files
gf-core/examples/sammie/SammieEng1.gf
2009-10-08 12:40:47 +00:00

235 lines
5.6 KiB
Plaintext

concrete SammieEng1 of Sammie = {
flags startcat=Action;
param SetForm = Any | All;
oper Set = { s : SetForm => Str } ;
oper mkSet : Str -> Set = \x -> { s = table {
Any => variants { "a"; "some"; "any" } ++ x ;
All => variants { "all"; ["all the"] } ++ (x + "s")
} } ;
oper mkSetAdj : Str -> Str -> Set = \x -> \adj -> { s = table {
Any => variants { "a"; "some"; "any" } ++ adj ++ x ;
All => variants { "all"; ["all the"] } ++ adj ++ (x + "s")
} } ;
oper optional : Str -> Str = \s -> variants { []; s } ;
oper song = variants {"song"; "track"} ;
oper album = variants {"album";"record";"cd"} ;
oper command : Str -> { s : Str } =
\s -> { s = variants {s; "please" ++ s; s ++ "please" } } ;
lincat
PlaylistSet, ArtistSet, AlbumSet, SongSet = Set ;
lin
-- Action
add_song_to_playlist l o =
command ("add" ++ o.s ++ "to" ++ l.s) ;
-- create a new playlist
create =
command ["create a new playlist"] ;
dialog_pause =
command (variants {
["pause the dialog"];
["be"] ++ variants { "quiet";"silent" };
["shut"] ++ variants {[]; ["the hell"]; ["the fuck"]} ++ "up";
["shut your mouth"];
["put a sock in it"];
});
go_back_in_display_history =
command (variants { ["back"]; ["go back"] }) ;
help =
command (variants { ["help"]; ["help me"]; ["give me help"] }) ;
-- tell me
identify x =
command (optional ["tell me"] ++ x.s) ;
-- identify_songlist_of_album x = command (x.s) ;
make_completion x = command (x.s) ;
pause =
command "pause" ;
play x =
command ("play" ++ x.s) ;
please_repeat =
command (variants {
["repeat that"];
["what"];
["pardon"];
["pardon me"];
["what did you say"];
["what was that"]
}) ;
-- I don't care
reject_any_constraint_determination =
command (variants {
["whatever"];
variants {["do i look like i"];["i don't"]}
++ variants {["give a"] ++ variants {"shit";"fuck";["rat's ass"]};
["care"]}
++ optional ["about that"];
["i couldn't care less"];
["see if i care"]
}) ;
remove l o =
command ("remove" ++ o.s ++ "from" ++ l.s) ;
resume =
command ("resume") ;
-- show me
show x =
command (["show me"] ++ x.s) ;
show_main_menu =
command (variants {
["show me the main menu"];
["go to the main menu"];
["back to the main menu"];
}) ;
skip_backward =
command (variants {"play"; ["go to"]} ++ ["the previous"] ++ song) ;
skip_forward =
command (variants {"play"; ["go to"]} ++ ["the next"] ++ song) ;
stop = command (variants { "stop" }) ;
-- ToIdentify
artist_of_album album =
{ s = "who" ++ variants {"made";"sings";"plays";"recorded"} ++ album.s } ;
artist_of_song song =
{ s = "who" ++ variants {"made";"sings";"plays";"recorded"} ++ song.s } ;
currently_playing_object =
{ s = variants {
["what is this"] ++ optional song ++ ["called"];
["what is the name of this"] ++ optional song;
} } ;
resource_by_type x = { s = x.s } ;
-- Object
one_song x = { s = x.s } ;
any_song x = { s = x.s ! Any} ;
all_songs x = { s = x.s ! All } ;
one_album x = { s = x.s } ;
any_album x = { s = x.s ! Any} ;
all_albums x = { s = x.s ! All } ;
one_playlist x = { s = x.s } ;
any_playlist x = { s = x.s ! Any} ;
all_playlists x = { s = x.s ! All } ;
-- PlaylistSet
playlists_all = mkSet "playlist" ;
playlists_by_genre genre = mkSetAdj "playlist" (genre.s) ;
-- Playlist
playlist_this = { s = ["this playlist"] } ;
playlist_number x = { s = "playlist" ++ x.s } ;
playlist_name x = { s = variants { ["the playlist"] ++ x.s; "the" ++ x.s ++ "playlist" }};
-- ArtistSet
artists_all = mkSet "artist" ;
-- Artist
artist_this = { s = ["this artist"] } ;
artist_name x = { s = optional ["the artist"] ++ x.s } ;
-- AlbumSet
albums_all = mkSet album ;
albums_by_artist artist = { s = \\n => (mkSet album).s ! n ++ "by" ++ artist.s };
albums_by_genre genre = mkSetAdj album (genre.s) ;
albums_by_artist_genre artist genre = { s = \\n => (mkSetAdj album (genre.s)).s ! n ++ "by" ++ artist.s };
-- Album
album_this = { s = ["this"] ++ album } ;
album_number n = { s = album ++ ["number"] ++ n.s } ;
album_name name = { s = optional (["the"] ++ album) ++ name.s } ;
album_name_artist name artist = { s = optional (["the"] ++ album) ++ name.s ++ "by" ++ artist.s } ;
-- SongSet
songs_all = mkSet song ;
songs_by_artist artist = { s = \\n => (mkSet song).s ! n ++ "by" ++ artist.s };
songs_by_genre genre = mkSetAdj song (genre.s) ;
songs_by_album album = { s = \\n => (mkSet song).s ! n ++ "from" ++ album.s } ;
songs_by_artist_genre artist genre = { s = \\n => (mkSetAdj song (genre.s)).s ! n ++ "by" ++ artist.s };
-- Song
song_this = { s = "this" ++ song } ;
song_name x = { s = optional ("the" ++ song) ++ x.s } ;
song_name_artist name artist = { s = optional ("the" ++ song) ++ name.s ++ "by" ++ artist.s } ;
-- Ordinal
-- num_1 = { s = "one" } ;
num_2 = { s = "two" } ;
-- num_3 = { s = "three" } ;
-- Music database
-- PlaylistName
CoolHits = { s = ["cool hits"] };
-- Romantik = { s = ["romance"] };
-- Artist
-- Falco = { s = ["Falco"] };
-- TheBeatles = { s = ["The Beatles"] };
U2 = { s = "u2" } ;
-- Genre
-- Pop = { s = ["pop"] };
Rock = { s = ["rock"] };
-- AlbumName
HowToDismantleAnAtomicBomb = { s = ["how to dismantle an atomic bomb"] };
-- SongName
-- AHardDaysNight = { s = ["a hard day's night"] };
-- LetItBe = { s = ["let it be"] };
Vertigo = { s = "vertigo" } ;
}