Question: I understand that there are three types of programming languages:

* Machine languages
* Assembly languages
* high-level languages

And that:

* Machine languages have no abstraction
* Assembly language have little abstraction
* High-level languages have much abstraction (data types being the difference maker?)

---

Is there a standard or model or taxonomy of programming languages different than machine-assembly-highlevel?

In other words, is this taxonomy necessary or are there more "sophisticated" or "complex" categorizations?

Answer: 
In casual words, a Turing machine can do anything computational, but *nothing else*; especially there's no IO. No keyboard, no mouse. It just takes a tape as input and runs a predefined program on it.

This means that you cannot use `window.prompt` or similar (anything that asks for user input) in the middle of your program, and therefore there is no equivalent of "Guess the number" program for TM. So, if you want to stick to the TM as the model of computation, you basically need a different problem that can be solved with binary search, without user input in the middle of the program.

Some examples of such problems include:

* An array of integers is given in strictly increasing order. Determine if a given number exists in the array.
* An array of integers is given, so that all odd numbers come before all even numbers. Find the first even number in the array.
* Given a polynomial and a range (upper and lower limits of the value of x), find a zero of the polynomial within the given range.
The way I understand your question, you are wondering why there is a need to do some extra computation (binary search in your case) if the TM can simply read the input, and it will already know the number to be searched, thus performing binary search is not necessary. This might not always be the case.

Consider, the situation, such that the input is the hash value $x'$ of the number that the TM will guess, instead of the actual number $x$. Here we assume that the hashing algorithm used to produce $x'$, is built internally to the TM, that is the TM can perform a hash. Now, as you might imagine, simply reading $x'$ will not help the TM to know what $x$ is. We will force it to actually guess. Although at this point, binary search might not be possible since the TM will not be able to know if the number is less than or greater than the middle value of the range. But instead it must perform the guessing brute-force, trying all values from the range. That is, the TM will start with the lowest value, compute its hash, test if it is equal with the input. If it is, then the TM guessed the number, otherwise it moves to the next number in the range and repeat until it found the right value or exhaust the range.

As a side note, the idea here is very much similar to what you would expect from log-in systems. Even though they can validate the password you enter when logging-in, they actually do not know your actual password, since they only store the hash of the password you initially set.

---

As @jaxad0127 in the comment suggested, you can change the hash function to be some other function $f()$ that is difficult to invert but preserves order. That is, for any two numbers $x\_1$ and $x\_2$ such that $x\_1 \lt x\_2 $, it is always guaranteed that $f(x\_1) \lt f(x\_2)$. This would now allow you to perform binary search. But still, reading the input $x'=f(x)$ will not give the TM any idea as to what the $x$ is and would be better-off performing binary search.