Recipes are ingredients
May 30, 2018 7:16 PM   Subscribe

A recursive recipe is one where ingredients in the recipe can be replaced by another recipe. The more ingredients you replace, the more that the recipe is made truly from scratch.
posted by Cash4Lead (58 comments total) 39 users marked this as a favorite
 
I am disappointed that it doesn't provide you a recipe for making 1 slice of bacon from scratch.
posted by Kutsuwamushi at 7:22 PM on May 30 [5 favorites]


Also, apparently buying Hollandaise sauce costs $0.00 and I would lose $.71 by making it from scratch. This person is apparently living in a paradise of free Hollandaise sauce.
posted by Kutsuwamushi at 7:24 PM on May 30 [28 favorites]






A very important point that my partner just made, that I have not fully tested yet but would like to bring up: I don't think it takes into account that you could be doing many of these things simultaneously. For example, in the chocolate chip recipe, if you aren't also raising a chicken in the 4 years that it takes to grow your wheat berries, you're wasting your time. Hence the final time of 9 years, 29 weeks, 4 days, 17 hours, and 21 minutes is probably only for if you do each step individually in order to completion before starting on the next one, which any cook knows is a terrible way to follow a recipe.
posted by brook horse at 7:42 PM on May 30 [12 favorites]


The problem with expressing a recipe as a directed acyclic graph is that it doesn't fully capture the relationship between baby chickens, egg-laying cheickens, and eggs.

I would love to see an interface where you could click on individual ingredients to expand them, instead of adjusting the time limit and looking for changes.
posted by Phssthpok at 7:47 PM on May 30 [2 favorites]


You can do that right now! Scroll down to the ingredients section.
posted by vibratory manner of working at 7:49 PM on May 30 [1 favorite]


I don't think it takes into account that you could be doing many of these things simultaneously.

It doesn't even take into account poaching multiple eggs simultaneously. Making four pieces of eggs benedict? Each egg needs to cook 30 minutes, so that's 2 hours you spend.
posted by wanderingmind at 7:51 PM on May 30 [2 favorites]


I think I'm just going to buy my 67 cookies. Harvesting salt wasn't really in my plan.
posted by 41swans at 7:54 PM on May 30 [4 favorites]


So first, we create the universe. I love this little bit of my memory that Mr. Sagan has burrowed into.
posted by Meatbomb at 8:03 PM on May 30 [7 favorites]


These aren't recursive recipes. A recursive recipe would call itself, not just another recipe. So, like sourdough for example.
posted by Dysk at 8:08 PM on May 30 [72 favorites]


Make the cow milk (40 minutes)
1. Tie a cow in a secure area so she can not escape

I laughed far too loudly.
posted by AlexiaSky at 8:14 PM on May 30 [6 favorites]


You could always dive into the biochemistry and molecular biology, too...

Ingredients in an All-Natural Strawberry.

Genome of the common chicken.
posted by darkstar at 8:30 PM on May 30 [4 favorites]


Good concept, slipshod execution.

They even screwed up the one recipe on their site that is truly recursive: yogurt.
posted by splitpeasoup at 8:41 PM on May 30 [9 favorites]


Oh man, I love this! I think this is actually a pretty great illustration of the archaeological concept of operational chains, where you examine the whole system of dependent manufacturing that goes into any one object.

The time estimates are bad, but all in all I think this does a good job of driving home just how much time and energy goes into even simple stuff. I mean, we’re all thinking about it now, right?
posted by shapes that haunt the dusk at 8:42 PM on May 30 [5 favorites]


bondcliff would find this handy if it had pizza on it.
posted by unliteral at 8:44 PM on May 30 [1 favorite]


These aren't recursive recipes. A recursive recipe would call itself, not just another recipe.

function recipe(refried beans){

recipe(butter);
recipe(beans);
// additional details omitted for concise point making
mix;
}

It's recursive.
posted by explosion at 8:46 PM on May 30 [4 favorites]


No, that would be the definition for the function refried_beans_recipe(). You don't use the input "refried beans".
posted by J.K. Seazer at 8:52 PM on May 30 [10 favorites]


Nevertheless, the procedure this site is illustrating is recursive; it's just that it's not the recipes themselves that are recursive, but the meta-recipe of how to follow recipes. Basically: "To make X, you need instructions for X and ingredients for X. For every Y in the list of ingredients for X, if you don't have Y, then make Y using the instructions for Y and the ingredients for Y." The recursive procedure is "make", and the stopping case that makes this an effective procedure (assuming the ingredient dependency graph is acylic) is that you don't have to make an ingredient if you already have it.
posted by J.K. Seazer at 9:08 PM on May 30 [7 favorites]


Of course, those instructions should say at the end "Then follow the instructions for X."
posted by J.K. Seazer at 9:09 PM on May 30 [1 favorite]


I somehow expected this to turn into a clicker game.
posted by Sequence at 9:11 PM on May 30 [13 favorites]


In video form, (and probably previously on the blue): How to Make a $1500 Sandwich in Only 6 Months
posted by matrixclown at 9:19 PM on May 30 [2 favorites]


Interesting way to demonstrate what all goes into putting food on the table, but I can't get past that cookie recipe, which includes 2 cups flour, 5 cups oats, .5 cups butter, and 1 cup of brown sugar. I image these would be rather dry and barely sweet enough to be considered cookies.
posted by she's not there at 10:20 PM on May 30 [6 favorites]


This works less well since they started to mete out sauce buckets at McD’s
posted by RobotVoodooPower at 10:52 PM on May 30 [1 favorite]


metafilter:
function metafilter(plate-of-beans){
  metafilter(plate-of-beans+1)
}
posted by chortly at 11:51 PM on May 30 [11 favorites]


So... some time ago I was building a web app for a recipe site I run, and I nearly ended up implementing this, more or less. When you start writing classes to represent recipes, and really think hard about it, this is probably what happens.

Also this is why I work in research and not professional web app development.
posted by destrius at 1:59 AM on May 31 [5 favorites]


function recipe(refried beans){

recipe(butter);
recipe(beans);
// additional details omitted for concise point making
mix;
}

It's recursive.


Eh. I see it more as:

[refried beans] = [beans] + [butter] + etc.

Whereas:

[sourdough] = [sourdough] + [flour] + [water]
posted by Dysk at 2:15 AM on May 31 [5 favorites]


I guess I see what you're saying as being "[the function] 'recipe' is recursive" which yeah, maybe. But the actual recipes themselves aren't, even if the concept of a recipe is.
posted by Dysk at 2:34 AM on May 31


These are branching recipes. Some branches recurse.
posted by ardgedee at 3:48 AM on May 31


Was this inspired by the trifle recipe in the milk calendar thread? Its ingredients included ladyfingers, sherry and jam so lots of potential to go hog wild with the 'from scratch' bits.
posted by Space Coyote at 4:31 AM on May 31


It's recipes all the way down.
posted by Foosnark at 5:23 AM on May 31 [1 favorite]


Many years ago, during college, my then-boyfriend (now husband) and I made a chicken pot pie, and excitedly texted a friend the following:

We made a chicken pot pie!
From scratch!
Well, mostly from scratch.
We didn't like mill the flour
Or grow the vegetables or anything like that.
But we made a chicken pot pie!
From scratch!
Well, mostly from scratch...

I forget how many times we repeated the loop, but it got to the point where, several years later, we could get the friend to go "Ohhhh noooooo" if we mentioned chicken pot pie.
posted by damayanti at 5:45 AM on May 31 [3 favorites]


The more ingredients you replace, the more that the recipe is made truly from scratch.

Ah yes the Recipe of Theseus
posted by everybody had matching towels at 6:28 AM on May 31 [3 favorites]


This is presumably in response to all those recipe sites which are like "take a can of x, add a packet of y, pour in a bottle of z" - which are certainly recipes, but you still end up with something designed by food scientists, and largely consisting of salt, corn syrup and msg.
posted by pompomtom at 6:58 AM on May 31 [1 favorite]


Anyway, as far as recursiveness goes, I think what they mean is not that it is a recursive function, but it is a recursive data structure:

type recipe = { name: string; ingredients : recipe list; instructions : string }

But of course we need a base case, so maybe something like this instead:

type recipe =
| Atom of string
| Composite of { name : string; ingredients : recipe list; instructions : string }

Alternatively you could just use the first form but let the base case be recipes with no ingredients. But that doesn't really seem to be the same. Maybe using GADTs would somehow make this better too. Hmm...
posted by destrius at 7:01 AM on May 31 [3 favorites]


So would you call something like SSE a recursive acronym? It's an acronym that contains an acronym after all. Personally, I would reserve the description for acronyms that contain themselves (like GNU or WINE) not merely another acronym. These recipes contain other recipes, but do not contain themselves.
posted by Dysk at 8:21 AM on May 31


This is presumably in response to all those recipe sites which are like "take a can of x, add a packet of y, pour in a bottle of z" - which are certainly recipes, but you still end up with something designed by food scientists, and largely consisting of salt, corn syrup and msg.

Oh, yes, the "dump cake", as in dump a cake mix, boxed pudding mix, and can of pie filling in a bowl, stir in oil and eggs, bake in a bundt pan. Top with canned frosting and/or Cool Whip (really, any petroleum industry product will do here). Staple of small-town, midwest pot lucks.

And if my snarky attitude makes me a food snob, so be it.
posted by she's not there at 8:27 AM on May 31 [1 favorite]


Isn't this more or less what Escoffier did in his 1903 "Le Guide Culinaire"? At least my edition is thousands of recipes referencing each other and you can resolve any complex (or simple) dish into more and more basic ingredient sub recipes.
posted by Hairy Lobster at 8:42 AM on May 31 [3 favorites]




Ah yes the Recipe of Theseus


Actually, that’s what I initially (erroneously) thought was going on here. The site is misbehaving on my iPad, so I can’t see its recursion functionality in process.

Anyway, I had originally misapprehended that the site was proposing to change one ingredient at a time, until it was no longer the same clade or phylum or whatever of foodstuff.

For example, take the recipe for a beef stew. Replace the carrots with corn. It’s still a stew. Replace the beef broth with cream. Probably still a creamy beef stew. Replace the beef with chicken. Is it still a stew, or is it now more of a chicken corn chowder? Replace the chicken with clams, and now it’s definitely a chowder.

And then I read some of the comments, and realized I was way off base.



mmm chowder
posted by darkstar at 9:04 AM on May 31 [1 favorite]


Fractal Kats
posted by darkstar at 9:05 AM on May 31 [1 favorite]


These aren't recursive recipes. A recursive recipe would call itself, not just another recipe.

They could be, easily enough. To make an egg, you need an egg-laying chicken. To make an egg-laying chicken, you need a chick. To make a chick, you need an egg and a rooster...

Or: to make vanilla extract, you need vanilla beans and alcohol. To make vanilla beans, you need a vanilla plant. To make a vanilla plant, you need a vanilla seed. To make a vanilla seed, you need a vanilla plant...
posted by DevilsAdvocate at 9:17 AM on May 31


Also, a bit surprised that baking powder is one of the "atomic" ingredients, as it's one of the easier ones to create: mix baking soda, cream of tartar, and cornstarch. (And the cornstarch is only necessary for long-term storage; if you're using it right away, the first two will do.)
posted by DevilsAdvocate at 9:19 AM on May 31


Three thoughts that came to mind while I looked at this - Butter for refried beans? Lard is better. But also the recipe requires you to cook it for 45 minutes? That's an awful long time for refried beans (especially if the beans are already cooked [and grown and dried]). The comment about Escoffier's Guide Culinaire got me thinking is there a sort of a modern Plotto for cooking?
posted by Ashwagandha at 9:26 AM on May 31 [1 favorite]


1. Tie a cow in a secure area so she can not escape

Instructions like these could have come from Edward Lear's "Nonsense Cookery" (Nonsense Gazette, August, 1870), particularly the recipe for Gosky Patties (though a pig is used instead of a cow).
posted by ubiquity at 9:50 AM on May 31 [1 favorite]


The recipe for Kit Kat is truly recursive: The filling between the wafers of a Kit Kat bar is made from crushed Kit Kat bars.
Fractal Kats


Are you reading this, cortex?
posted by ambrosen at 10:46 AM on May 31 [1 favorite]


1. Tie a cow in a secure area so she can not escape

It's actually kind of hard to tie up a cow. They are surprisingly strong and destructive, which is why you fence them in, or you encase them in metal framing for the likes of industrial milking or medicine/branding.
posted by The_Vegetables at 10:48 AM on May 31 [1 favorite]


The filling between the wafers of a Kit Kat bar is made from crushed Kit Kat bars.

But where did they get the first crushed Kit Kat bars? And it's not like crushed Kit Kats reproduce like a sourdough recipe, the more KitKats you make, the more there had to have been prior to the one you're currently making. But, like sourdough: how much of the Kit Kat you eat today is the original, protoKitKat?

Edit: The Today show gets where I'm coming from
posted by AzraelBrown at 11:12 AM on May 31 [1 favorite]


But where did they get the first crushed Kit Kat bars?

From failed attempts at baking, which any baker knows are common. You create lots of ugly food trying to create nice looking food.
posted by The_Vegetables at 12:49 PM on May 31 [3 favorites]


So would you call something like SSE a recursive acronym? It's an acronym that contains an acronym after all.

It's more that the acronym datatype is recursive, in that an acronym is a list of (either word or acronym).
posted by Jpfed at 2:26 PM on May 31 [1 favorite]


Who will help me plant these seeds?

This also reminded me of a story Click and Clack told on Car Talk. They were just getting started as mechanics and a customer came in with a problem they hadn’t dealt with before. They glanced at the shop manual and saw that the instructions only took up a page or so and told the customer it was an easy repair and they would have it done in no time. They then rolled the car into the shop and actually read the instructions, which began: “Step one: remove the engine.”
posted by TedW at 3:03 PM on May 31 [5 favorites]


My potato salad recipe already takes three days. That's probably far enough.
posted by halfbuckaroo at 6:17 PM on May 31 [1 favorite]


It's more that the acronym datatype is recursive, in that an acronym is a list of (either word or acronym).

Yeah. I think the problem here is that they're saying the recipe is recursive, but what they really mean is that food is recursive: food is made out of food. The process for creating food out of other food, i.e. the recipe, is not recursive.
posted by destrius at 7:18 PM on May 31 [1 favorite]


With regard to meta-reciping, I spent all of my adult life cooking and most of it sourcing recipes from the Internet, mostly in English, and only just a while ago it dawned on me that the English word "recipe" is actually Latin for "collect" (the ingredients, I suppose).
posted by _dario at 8:45 PM on May 31


It's more that the acronym datatype is recursive, in that an acronym is a list of (either word or acronym).

Okay, but that doesn't make a list of acronyms that don't reference themselves "recursive acronyms". They're just acronyms, even if that category it datatype is recursive. Similarly, these are not "recursive recipes".
posted by Dysk at 12:35 AM on June 1


Even if that category or datatype is recursive. For some reason the site refused to save my edit on that comment.
posted by Dysk at 12:41 AM on June 1


This was bothering me too, so instead of sleeping I had to pseudocode it as an actual recursive function; imagine we're pulling the ingredients for each recipe out of, say, a big ol' map of lists:

retrieve_recipe (Recipe r) {
..// if r is not atomic recurse function
..if r != recipemap.getIngredients(r) {
....for each ingredient in recipemap.getIngredients(r) {
......retrieve_recipe(ingredient)
....}
..}
..else output r // e.g. add its recipe to some giant list of Actual Shit We're Doing, idk I'm sleepy
}

(I didn't RTMFA so YMMV, AMA)
posted by taquito sunrise at 2:04 AM on June 1


2 cups flour, 5 cups oats, .5 cups butter, and 1 cup of brown sugar.

40% more oats that all other ingredients combined? Those aren't cookies, that's flour-dusted granola.
posted by jackbishop at 6:06 AM on June 3


« Older Just another sad gentrification story.   |   Cuteness update: I'm dying. Newer »


This thread has been archived and is closed to new comments