Coffee disambiguation (JACL example)
The key to achieving this type of disambiguation in JACL is being careful with the number of names each object is given. For example, consider the following three objects:
object ball_1: ball object ball_2: small red ball object ball_3: big red ball
Presuming all these objects were in the current location, if the player referred to ball, then ball_1 would be selected. This is because the JACL interpreter divides the number of names an object has by the number of names supplied to come up with a best match. Although all three objects have the name ball, ball_1 matches 100% while ball_2 and ball_3 only match 33%. If the player referred to red ball, then ball_1 would automatically be excluded, as it does not have the name red. On the other hand, both ball_2 and ball_3 have the names red ball, and both would match 66%. In this case a message displays stating that the reference was ambiguous. If the player referred to big, then ball_3 would automatically be selected as neither of the other two objects have the name big at all.
The following transcript:
Coffee disambiguation: v1.0 This pleasant living room is ever-so-lightly furnished with a coffee table. A kitchen can be found to the north. >examine coffee The coffee table is a modern piece of furniture with metal legs and a square glass top. >n This test kitchen is very clean. It's so clean, it hardly has anything in it. The living room is to the south. There is a coffee mug here. Sitting on the bench is a large coffee urn. >take mug You take the coffee mug. >pour coffee Using the urn, you fill the mug with hot coffee. >drink coffee You drink the mug of coffee. Aaah. The satisfaction. >drink coffee How rude! Use a mug! >s This pleasant living room is ever-so-lightly furnished with a coffee table. A kitchen can be found to the north. >examine coffee Are you referring to: [1] the coffee mug [2] the coffee table Type the number of the object >1 The mug has the phrase 'WORLD'S BEST EXAMPLE CODER' prominently on the outside. The inside of the mug is empty.
Is produced by this code:
#!../bin/jacl constant GAME_VERSION 1 location kitchen : test kitchen short the "test kitchen" south living_room {look print: This test kitchen is very clean. It's so clean, it hardly has anything in it. The living room is to the south.^ . } object mug : world's best example coder coffee mug short the "coffee mug" long "There is a coffee mug here." mass 4 capacity 5 has CONTAINER {examine print: The mug has the phrase 'WORLD'S BEST EXAMPLE CODER' prominently on write "the outside. The inside of the mug is . if cup_full(parent) = mug write "full of coffee.^" else write "empty.^" endif } object coffee_urn : big large round heavy coffee urn short the "coffee urn" long "Sitting on the bench is a large coffee urn." mass heavy capacity 10 has CONTAINER {examine print: The urn is large, round, and heavy. It has to be large to hold the endless supply of coffee inside it. Perhaps you'd like to pour some into a mug?^ . } {pour if mug is *present if cup_full(parent) = mug write "But the mug is full!^" set TIME = false else write "Using the urn, you fill the mug with hot coffee.^" move cup_full to mug endif else write "But you don't have a mug!^" endif } {pour_on_mug if cup_full(parent) = mug write "But the mug is full!^" set TIME = false else write "Using the urn, you fill the mug with hot coffee.^" move cup_full to mug endif } {take_all_from write "You can't empty the urn.^" set TIME = false } object coffee_supply : endless supply dark of coffee short the "endless supply of coffee" parent coffee_urn mass 5 has LIQUID {examine write "Hello, tall, dark, and endless.^" } {pour proxy "pour urn" } {pour_on_mug proxy "pour urn into mug" } {smell write "Hello, tall, dark, and endless.^" } {drink write "How rude! Use a mug!^" set TIME = false } object cup_full : cup full of coffee short a "cup full of coffee" mass 4 has LIQUID parent limbo {examine write "The coffee in the mug looks quite drinkable.^" } {smell write "Smells good. A cupful of good.^" } {drink : taste write "You drink the mug of coffee. Aaah. The satisfaction.^" move cup_full to limbo } location living_room : living room short the "living room" north kitchen {look print: This pleasant living room is ever-so-lightly furnished with a coffee table. A kitchen can be found to the north.^ . } object coffee_table : modern square glass top coffee table short the "coffee table" mass scenery has SURFACE capacity 20 {examine print: The coffee table is a modern piece of furniture with metal legs and a square glass top. . execute +details<noun1 write ^ } {sit_on : jump_on write "<p>The spec says you're not allowed to.^" set TIME = false } {+intro clear write "^^<p>Coffee disambiguation: v1.0^^" look } object kryten: myself self me has ANIMATE short name "yourself" quantity 42 parent living_room player #include "verbs.library"