scala-problem41-50
요구
코드
요구
코드
요구
코드
요구
코드
* 성명 * 이 시 리 즈 는 다음 과 같 습 니 다.http://aperiodic.net/phil/scala/s-99/ 대부분의 내용 이 원문 과 같 아 일부 자신의 코드 를 넣 었 다.권리 침해 가 있 으 면 즉시 본인 에 게 연락 하 세 요.본인 은 즉시 관련 내용 을 삭제 할 것 이다.
P46 (**) Truth tables for logical expressions.
요구 하 다.
Define functions and, or, nand, nor, xor, impl, and equ (for logical equivalence) which return true or false according to the result of their respective operations; e.g. and(A, B) is true if and only if both A and B are true.
scala> and(true, true)
res0: Boolean = true
scala> xor(true. true)
res1: Boolean = false
A logical expression in two variables can then be written as an function of two variables, e.g: (a: Boolean, b: Boolean) => and(or(a, b), nand(a, b))
Now, write a function called table2 which prints the truth table of a given logical expression in two variables.
scala> table2((a: Boolean, b: Boolean) => and(a, or(a, b)))
A B result
true true true
true false true
false true false
false false false
코드
요구 에 따라 호출 방법, 예 를 들 어 4. 567914. 는 도구 방법 이 아 닌 도구 방법 과 같 기 때문에 이 를 object 의 방법 으로 정의 하면 된다.
object S99Logic {
def and(a: Boolean, b: Boolean): Boolean = (a, b) match {
case (true, true) => true
case _ => false
}
def or(a: Boolean, b: Boolean): Boolean = (a, b) match {
case (false, false) => false
case _ => true
}
def not(a: Boolean): Boolean = !a
def nand(a: Boolean, b: Boolean): Boolean = not(and(a, b))
def nor(a: Boolean, b: Boolean): Boolean = not(or(a, b))
def equ(a: Boolean, b: Boolean): Boolean = or(and(a, b), and(not(a), not(b)))
def xor(a: Boolean, b: Boolean): Boolean = not(equ(a, b))
def impl(a: Boolean, b: Boolean): Boolean = or(not(a), b)
def table2(f: (Boolean, Boolean) => Boolean) {
println("A B result")
for (
a <- List(true, false);
b <- List(true, false)
) {
printf("%-5s %-5s %-5s
", a, b, f(a, b))
}
}
}
P47 (*) Truth tables for logical expressions (2).
요구 하 다.
Continue problem P46 by redefining and, or, etc as operators. (i.e. make them methods of a new class with an implicit conversion from Boolean.) not will have to be left as a object method.
scala> table2((a: Boolean, b: Boolean) => a and (a or not(b)))
A B result
true true true
true false true
false true false
false false false
코드
요구 에 따라 불 값 은 식 을 이 유형의 대상 으로 바 꾸 어 접두사 조작 자 를 지원 합 니 다.
class S99Logic(a: Boolean) {
import S99Logic._
def and(b: Boolean): Boolean = (a, b) match {
case (true, true) => true
case _ => false
}
def or(b: Boolean): Boolean = (a, b) match {
case (true, _) => true
case (_, true) => true
case _ => false
}
def equ(b: Boolean): Boolean = (a and b) or (not(a) and not(b))
def xor(b: Boolean): Boolean = not(a equ b)
def nor(b: Boolean): Boolean = not(a or b)
def nand(b: Boolean): Boolean = not(a and b)
def impl(b: Boolean): Boolean = not(a) or b
}
object S99Logic {
implicit def boolean2S99Logic(a: Boolean): S99Logic = new S99Logic(a)
//...
}
P49 (**) Gray code.
요구 하 다.
그레이 코드
An n-bit Gray code is a sequence of n-bit strings constructed according to certain rules. For example,
n = 1: C(1) = ("0", "1").
n = 2: C(2) = ("00", "01", "11", "10").
n = 3: C(3) = ("000", "001", "011", "010", "110", "111", "101", "100").
Find out the construction rules and write a function to generate Gray codes.
scala> gray(3)
res0 List[String] = List(000, 001, 011, 010, 110, 111, 101, 100)
See if you can use memoization to make the function more efficient.
코드
P50 (*) Huffman code.
호 프 만 코드
요구 하 다.
First of all, consult a good book on discrete mathematics or algorithms for a detailed description of Huffman codes! We suppose a set of symbols with their frequencies, given as a list of (S, F) Tuples. E.g. ((“a”, 45), (“b”, 13), (“c”, 12), (“d”, 16), (“e”, 9), (“f”, 5)). Our objective is to construct a list of (S, C) Tuples, where C is the Huffman code word for the symbol S.
scala> huffman(List(("a", 45), ("b", 13), ("c", 12), ("d", 16), ("e", 9), ("f", 5)))
res0: List[String, String] = List((a,0), (b,101), (c,100), (d,111), (e,1101), (f,1100))
코드
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JDK 11을 사용하여 NixOS에서 Play Framework 실행저는 NixOS로 전환하고 있으며 이에 대해 다소 기대하고 있습니다. 오늘 저는 sbt 설치 및 JDK 11로 다운그레이드를 포함하여 Play Framework 환경을 손쉽게 설치하고 실행할 수 있게 된 것을 축하합...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.